Android学习笔记(六)Fragment的生命周期
在上一篇博文中对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的生命周期的更多相关文章
- 零基础Android学习笔记-02 安卓程序生命周期
一个安卓程序生命周期会经历7中状态,并不一定是每次都全部经历.Create,Start,ReStart,Pause,Resume,Stop,Destory. 重载方法,用helloWorld程序去体验 ...
- 【Android】11.4 Fragment及其生命周期
分类:C#.Android.VS2015: 创建日期:2016-02-22 一.简介 Android从3.0开始引入了fragment的概念,主要是为了支持在大屏幕上实现更为动态和灵活的UI设计,比如 ...
- Android(java)学习笔记171:Service生命周期
1.Service的生命周期 Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...
- Android(java)学习笔记114:Service生命周期
1.Service的生命周期 Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...
- android学习四(Activity的生命周期)
要学好活动(Activity).就必需要了解android中Activity的声明周期.灵活的使用生命周期.能够开发出更好的程序,在android中是使用任务来管理活动的,一个任务就是一组存放在栈里的 ...
- .net学习笔记----Asp.net的生命周期之一应用程序生命周期
Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候,IIS (Internet Information Services,互联网信息服务)首先需要决定如何去处理这个请求. 什么是 ...
- vue学习笔记(二)vue的生命周期和钩子函数
前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...
- React学习笔记-4-什么是生命周期
什么是声明周期?组件本质上就是状态机,输入确定,输出一定确定.如何理解这一点?react有两个特点,第一个就是去除了所有的手动dom操作,也就是使用jsx.第二个就是组件把状态和结果一一对应起来,从而 ...
- .net学习笔记---Asp.net的生命周期之二页生命周期
用户请求 从 用户角度来说,我不管你后台经历了什么,我只想要我请求的页面.请求到服务器端,服务器必须得有所表示的是吧,即使不想搭理人家也得让IIS给人家说声:找不到服务器.请求来到服务器端,肯定要让服 ...
- Java学习笔记之——线程的生命周期、线程同步
一. 线程的生命周期 新建(new Thrad):创建线程后,可以设置各个属性值,即启动前 设置 就绪(Runnable):已经启动,等待CPU调动 运行(Running):正在被CPU调度 阻塞(B ...
随机推荐
- 学习java随笔第十一篇:java窗体程序
要开java的窗体程序,就要下载开发窗体的工具. 这里我用的是的myeclipse,可以直接在网上下载安装即可. 我用的是10.0版本的,如果需要汉化的话,可以看一下这篇文章:myeclipse.10 ...
- [Excel] C# ExcelHelper操作类 (转载)
点击下载 ExcelHelper.rar 主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Exc ...
- js -去掉首尾的空格.
function trimFE (str) { return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }
- .NET 互操作
首先推荐一本书<精通.NET 互操作> ,这本书是目前中文资料里讲 互操作最详尽的书了. 做系统集成项目的同学应该都和设备打过交道(如视频设备:海康.大华等),在大多数情况下这些设备厂商会 ...
- 如何解决在GDI画图中,多次修改画笔的颜色
首先创建个画笔对象: CPen gPen;gPen.CreatePen(PS_SOLID, 1, RGB(120,120,130));//一定灰度的画笔〈/br〉CPen* pOldPen = pDC ...
- CSS3 中FLEX快速实现BorderLayout布局
学习完flex的布局模式之后,我们趁热打铁,来实现一个BoxLayout布局.什么是BoxLayout布局?那我们先上一个图看看 BoxLayout布局写过后端UI代码的编程者应该不陌生了,写前端的代 ...
- 不同浏览器下的CSS HACK
今天接了个新项目,年底要做完.预祝我顺利完成工作吧.在搭CSS框架的过程中,遇到了一些浏览器兼容性问题.于是就统计一下各个浏览器专用的css hack吧. (粘贴自百科百科) 针对火狐浏览器的CSS ...
- SQL的四种语言和数据库范式
1. SQL的四种语言 DDL(Data Definition Language)数据库定义语言 CREATE ALTER DROP TRUNCATE COMMENT RENAME DML(Data ...
- uboot内存分布
一.uboot的内存分布图 山人自己画的图 华清远见的图 二.如何修改编译地址 board/smdk2410/config.mk中定义有TEXT_BASE TEXT_BASE = 0x33F80000 ...
- 编程思想—面向切面编程(AOP)
谈到面向切面的编程,我们很容易关联到面向对象编程(OOP).个人对这两种编程方式的解释为:两种编程思想只是站在编程的角度问题. OOP注重的是对象,怎么对对象行为和方法的抽象.如何封装一个具有完整属性 ...