在上一篇博文中对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. KMP算法_读书笔记

    下面是KMP算法的实现伪代码: KMP_MATCHER ( T, P ) . n = T.length . m = P.length . next = COMPUTE_PREFIX_FUNCTION ...

  2. SQL的数据类型

    Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多 8,000 个字符. N的范围1-8000 varchar(n) 可变长度的字符串.最多 8,000 个字符 ...

  3. 转:Android软件开发之PreferenceActivity中的组件

    本文转于 “雨松MOMO的程序世界” 博客,请务必保留此出处http://xys289187120.blog.51cto.com/3361352/656784 1.PreferenceActivity ...

  4. Android运行异常情况分析(持续更新)

    1.java.lang.IllegalAccessException: access to class not allowed 原因:在写class 文件的时候没有把class设置成public 2. ...

  5. web页面的优化

    众所周知,一个web页面通常会包括HTML(XHTML.XML).CSS.Javascript,而其中HTML(XHTML.XML)为结构化语言,用于构建页面结构和相关数据:CSS则负责页面的样式,即 ...

  6. 【转】.Net中通过反射技术的应用----插件程序的开发入门

    转自:http://www.cnblogs.com/winloa/archive/2012/03/25/2416355.html .Net中通过反射技术的应用----插件程序的开发入门 再开始之前,先 ...

  7. c、c++混编实现查询本地IP地址

    一.思路 1.要想得到本地IP地址,可以通过本机名来查询,所以首先得得到本机名. 2.牵涉到IP地址,首先想到牵涉到网络协议,因此得加载套接字协议,所以先使用WSAStartup函数完成对Winsoc ...

  8. Windows phone 之自定义控件(补充)

    <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x= ...

  9. 疯狂的表单-html5新增表单元素和属性

    疯狂的表单 2015/11/27 16:44:07 从三方面来介绍html5表单的新特性 表单结构更灵活 要提交数据的控件可以布局在form标签之外,看下面的代码,表单元素可以写到form元素之外,只 ...

  10. 开发语言大PK:php和Java哪个更好?

    Java通过jdbc来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库.访问数据库的接口比较统一. PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强.例如 ...