在上一篇博文中对Fragment做了简单的介绍,现在再来探讨一下Fragment的生命周期。

一、Fragment的几种状态:  

  与Activity类似,Fragment也有一下几种状态:

  · 活动状态:当前Fragment位于前台,可见,可获得焦点。

  · 暂停状态:其他Activity位于前台,该Fragment可见,不可获得焦点。

  · 停止状态:不可见,失去焦点。

  · 销毁状态:该Fragment被完全删除或被结束。

二、Fragment的回调方法:

  在Fragment的生命周期中,有一下方法会被回调:

  · onAttach():当Fragment被添加到Activity时被回调,只回调一次。

  · onCreate(Bundle savedStatus):创建Fragment时被回调,一次。

  · onCreateView(): 每次创建、绘制该Fragment的View组件时回调,Fragment将会显示该方法返回的View组件。

  · onActivityCreated():Fragment所在的Activity启动完成后回调。

  · onStart():每次启动或恢复Fragment时被回调。

  · onResume():每次启动或恢复Fragment时被回调,onStart()回调后就会回调此方法。

  · onPause():暂停时回调。

  · onStop():停止Fragment时回调。

  · onDestroyView():销毁Fragment的View组件时回调。

  · onDestroy():销毁Fragment时调用,一次。

  · onDetach():将Fragment从Activity中删除、被替换完成时回到该方法,在onDestroy()之后回调。

  根据以上方法被回调的时机,我们可以根据需要选择性的覆盖指定方法。从而实现相关需求。

三、Fragment生命周期实例

  下面代码是Fragment生命周期的例子,重写了以上十一个生命周期方法:

 @SuppressLint("NewApi")
public class MyFragment extends Fragment {
Button bnOk;
TextView tvShow;
private final String TAG = "MyFragment"; public MyFragment(){
System.out.println(TAG + ":MyFragment()");
} @Override
public void onAttach(Activity activity) {
super.onAttach(activity);
System.out.println(TAG + ":onAttach()");
} @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println(TAG + ":onCreate()"); }
//重写改方法,返回值View将作为Fragment显示的组件
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println(TAG + ":onCreateView()");
//加载fragment_main.xml布局文件
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
} @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
System.out.println(TAG + ":onActivityCreated()");
} @Override
public void onStart() {
super.onStart();
System.out.println(TAG + ":onStart()");
} @Override
public void onResume() {
super.onResume();
System.out.println(TAG + ":onResume()");
} @Override
public void onPause() {
super.onPause();
System.out.println(TAG + ":onPause()");
} @Override
public void onStop() {
super.onStop();
System.out.println(TAG + ":onStop()");
} @Override
public void onDestroyView() {
super.onDestroyView();
System.out.println(TAG + ":onDestroyView()");
} @Override
public void onDestroy() {
super.onDestroy();
System.out.println(TAG + ":onDestroy()");
} @Override
public void onDetach() {
super.onDetach();
System.out.println(TAG + ":onDetach()");
} }

  下面我们来试验一下并看日志结果:

  1、启动Fragment日志如下(请忽略黄色日志):

  

  2、息屏状态下:

  

  3、重新点亮屏幕:

  

  4、退出:

  

  其实还有更多的情况,着这里就不一一试验了。这个例子虽然很简单,但能很好的反映了Fragment生命周期中各方法的回调时机。

Android学习笔记(六)Fragment的生命周期的更多相关文章

  1. 零基础Android学习笔记-02 安卓程序生命周期

    一个安卓程序生命周期会经历7中状态,并不一定是每次都全部经历.Create,Start,ReStart,Pause,Resume,Stop,Destory. 重载方法,用helloWorld程序去体验 ...

  2. 【Android】11.4 Fragment及其生命周期

    分类:C#.Android.VS2015: 创建日期:2016-02-22 一.简介 Android从3.0开始引入了fragment的概念,主要是为了支持在大屏幕上实现更为动态和灵活的UI设计,比如 ...

  3. Android(java)学习笔记171:Service生命周期

    1.Service的生命周期         Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...

  4. Android(java)学习笔记114:Service生命周期

    1.Service的生命周期         Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...

  5. android学习四(Activity的生命周期)

    要学好活动(Activity).就必需要了解android中Activity的声明周期.灵活的使用生命周期.能够开发出更好的程序,在android中是使用任务来管理活动的,一个任务就是一组存放在栈里的 ...

  6. .net学习笔记----Asp.net的生命周期之一应用程序生命周期

    Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候,IIS (Internet Information Services,互联网信息服务)首先需要决定如何去处理这个请求. 什么是 ...

  7. vue学习笔记(二)vue的生命周期和钩子函数

    前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...

  8. React学习笔记-4-什么是生命周期

    什么是声明周期?组件本质上就是状态机,输入确定,输出一定确定.如何理解这一点?react有两个特点,第一个就是去除了所有的手动dom操作,也就是使用jsx.第二个就是组件把状态和结果一一对应起来,从而 ...

  9. .net学习笔记---Asp.net的生命周期之二页生命周期

    用户请求 从 用户角度来说,我不管你后台经历了什么,我只想要我请求的页面.请求到服务器端,服务器必须得有所表示的是吧,即使不想搭理人家也得让IIS给人家说声:找不到服务器.请求来到服务器端,肯定要让服 ...

  10. Java学习笔记之——线程的生命周期、线程同步

    一. 线程的生命周期 新建(new Thrad):创建线程后,可以设置各个属性值,即启动前 设置 就绪(Runnable):已经启动,等待CPU调动 运行(Running):正在被CPU调度 阻塞(B ...

随机推荐

  1. 用于做 Android 屏幕自适应的文章资源

    Android Developer : (1) https://developer.android.com/training/multiscreen/index.html (2) https://de ...

  2. 使用Preference保存设置

    http://blog.csdn.net/barryhappy/article/details/7381544 Android中有四种持久化数据的方法:SQLite数据库.文件存储.Preferenc ...

  3. Ubuntu Server下建立VPN服务器 pptp 模式的方法

    对于想要在外部访问内部的网络,除了在防火墙上开启相应服务器所对应的端口,最好的方法应该是建立VPN-Server,使得用户可以在外网任何一台计算机上拨入到内网中进行操作,而且VPN可以记录详细的日志, ...

  4. HTML5教程:课时一HTML简介

    一.HTML5新特性 1.HTML5多媒体:标签:视频<video>  :音频<audio> 2.HTML5应用:  本地数据存储:访问本地文件: 本地SQL数据:缓存引用: ...

  5. Action<>和Func<>区别

    Action<>和Func<>其实都是委托的[代理]简写形式. 简单的委托写法: //普通的委托 public delegate void myDelegate(string ...

  6. POJ 1185 状态压缩DP(转)

    1. 为何状态压缩: 棋盘规模为n*m,且m≤10,如果用一个int表示一行上棋子的状态,足以表示m≤10所要求的范围.故想到用int s[num].至于开多大的数组,可以自己用DFS搜索试试看:也可 ...

  7. PC110304/UVA850

    这题目WA了好几次,主要是我没有理解清楚No solution.这个情况. 如果在match原文做好了,基本map一下就能过了. 与原句match的条件就是: 1.出现了26个字母 2.该空格的地方要 ...

  8. [转]显示文件命令:cat、more、less、tail、touch详解

    cat命令cat命令连接文件并打印到标准输出设备上.cat经常用来显示文件的内容,类似于下的type命令. 一般格式:cat [选项] 文件说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取 ...

  9. 利用青瓷布局自定义加载的场景,而不是自己改写qici-loading

    加载界面如果全部通过自己手动布局不仅不美观,还很难控制.借用原生的场景切换加载效果,来实现我们游戏的加载效果. 没有做加载修改的原来的加载顺序:   黑乎乎界面->(游戏定制的加载)你的第一个场 ...

  10. 练习2 G题 - 数值统计

      Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description 统计给 ...