理解Fragment的生命周期

- package net.learn2develop.Fragments;
- import android.app.Activity;
- import android.app.Fragment;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.util.Log;
- public class Fragment1 extends Fragment {
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- Log.d("Fragment 1", "onAttach");
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.d("Fragment 1", "onCreate");
- }
- @Override
- public View onCreateView(LayoutInflater inflater,
- ViewGroup container, Bundle savedInstanceState) {
- Log.d("Fragment 1", "onCreateView");
- // Inflate the layout for this fragment
- return Inflater.inflate(R.layout.fragment1,
- container, false);
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- Log.d("Fragment 1", "onActivityCreated");
- }
- @Override
- public void onStart() {
- super.onStart();
- Log.d("Fragment 1", "onStart");
- }
- @Override
- public void onResume() {
- super.onResume();
- Log.d("Fragment 1", "onResume");
- }
- @Override
- public void onPause() {
- super.onPause();
- Log.d("Fragment 1", "onPause");
- }
- @Override
- public void onStop() {
- super.onStop();
- Log.d("Fragment 1", "onStop");
- }
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- Log.d("Fragment 1", "onDestroyView");
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- Log.d("Fragment 1", "onDestroy");
- }
- @Override
- public void onDetach() {
- super.onDetach();
- Log.d("Fragment 1", "onDetach");
- }
- }
- 04-02 06:55:38.953: DEBUG/Fragment 1(6818): onAttach
- 04-02 06:55:38.953: DEBUG/Fragment 1(6818): onCreate
- 04-02 06:55:38.963: DEBUG/Fragment 1(6818): onCreateView
- 04-02 06:55:38.983: DEBUG/Fragment 1(6818): onActivityCreated
- 04-02 06:55:38.983: DEBUG/Fragment 1(6818): onStart
- 04-02 06:55:39.003: DEBUG/Fragment 1(6818): onResume
(5) 按下模拟器上的Home按钮。LogCat窗口中输出的内容如下所示:
- 04-02 04:03:45.543: DEBUG/Fragments(2606): onPause
- 04-02 04:03:47.394: DEBUG/Fragments(2606): onStop
(6) 在模拟器上单击屏幕右上角的Apps按钮再次启动应用。这一次,LogCat窗口中输出的内容如下所示:
- 04-02 04:04:32.703: DEBUG/Fragments(2606): onStart
- 04-02 04:04:32.703: DEBUG/Fragments(2606): onResume
(7) 最后,单击模拟器上的Back按钮。现在会看到如下输出:
- 04-02 07:23:07.393: DEBUG/Fragment 1(7481): onPause
- 04-02 07:23:07.393: DEBUG/Fragment 1(7481): onStop
- 04-02 07:23:07.393: DEBUG/Fragment 1(7481): onDestroyView
- 04-02 07:23:07.403: DEBUG/Fragment 1(7481): onDestroy
- 04-02 07:23:07.413: DEBUG/Fragment 1(7481): onDetach
示例说明
与活动类似,Android中的Fragment也拥有自己的生命周期。如你所见,当创建Fragment时,它会经历如下状态:
- onAttach()
- onCreate()
- onCreateView()
- onActivityCreated()
当Fragment变为可见时,它会经历如下状态:
- onStart()
- onResume()
当Fragment进入后台模式时,它会经历如下状态:
- onPause()
- onStop()
当Fragment销毁时(当托管Fragment的活动销毁时),它会经历如下状态:
- onPause()
- onStop()
- onDestroyView()
- onDestroy()
- onDetach()
与活动类似,可以在如下状态中使用Bundle对象恢复Fragment实例:
- onCreate()
- onCreateView()
- onActivityCreated()

- onAttached()—当Fragment关联到活动上时调用
- onCreateView()—为Fragment创建视图时调用
- onActivityCreated()—当活动的onCreate()方法返回时调用
- onDestroyView()—当Fragment的视图被删除时调用
- onDetach()—当Fragment脱离活动时调用
意一下活动与Fragment之间的一个主要差别。它动进入后台时,它会被放到后台栈中。这样当用户按下Back按钮时,活动就可以重新执行。但对于
Fragment来说,当进入到后台时,它们并不会被放到后台栈中。相对于将Fragment放到后台栈中来说,需要显式地在Fragment事务中调用
addToBackStack()方法,如下所示:
- if (d.getWidth() > d.getHeight())
- {
- //---landscape mode---
- Fragment1 fragment1 = new Fragment1();
- fragmentTransaction.replace(
- R.id.fragmentContainer, fragment1);
- }
- else
- {
- //---portrait mode---
- Fragment2 fragment2 = new Fragment2();
- fragmentTransaction.replace(
- R.id.fragmentContainer, fragment2);
- }
- //---add to the back stack---
- fragmentTransaction.addToBackStack(null);
- fragmentTransaction.commit();
理解Fragment的生命周期的更多相关文章
- Fragment的生命周期&同一Activity下不同Fragment之间的通信
Android开发:碎片Fragment完全解析(2) Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方 ...
- 友盟页面统计 - 关于Viewpager中的Fragment的生命周期
Activity和Fragment各自理论上的生命周期 Activity的生命周期是较为经典也最清晰的,在此不表: Fragment从出现到广泛运用也有一段时间了,其标准生命周期也仅比Activity ...
- 【Android】11.4 Fragment及其生命周期
分类:C#.Android.VS2015: 创建日期:2016-02-22 一.简介 Android从3.0开始引入了fragment的概念,主要是为了支持在大屏幕上实现更为动态和灵活的UI设计,比如 ...
- 死磕 Fragment 的生命周期
死磕 Fragment 的生命周期 本文原创,转载请注明出处.欢迎关注我的 简书 ,关注我的专题 Android Class 我会长期坚持为大家收录简书上高质量的 Android 相关博文.本篇文章已 ...
- Fragment的生命周期
Fragment的生命周期: 1. onAttach():Fragment对象跟Activity关联时 2. onCreate():Fragment对象的初始创建时 3. onCreateView() ...
- Fragment的生命周期(三)
自定义lifecycleoffragment布局文件 在main_activity布局中引用自定义的fragment布局 到logcat中查看程勋运行的结果 代码如下: 自定义的fragment布局: ...
- fragment的生命周期及其各个周期方法的作用
先上生命周期图: Fragment的生命周期图: 与Activity的生命周期对比图: 由于Fragment是嵌在Activity中使用的,故其生命周期也是依赖于Activity的周期的,或者说Fra ...
- Activity与Fragment的生命周期
今天看到一张图,详细描述了Activity和Fragment的生命周期,好资源共享咯!
- Android系列之Fragment(二)----Fragment的生命周期和返回栈
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
随机推荐
- linq判断一个枚举的Name是否存在
比如,枚举如下: [Serializable] public enum PayType : int { /// <summary> /// AAA /// </summary> ...
- jsp02
el表达式,jstl标签 1.el表达式是什么? sun制定的一种规范,主要是给标签的属性赋值,或者直接输出. <%=user.name%> java5版本以上支持jsp的el表达式和js ...
- toFixed()与toPrecision()
toFixed(n): 返回一个字符串,代表一个以定点表示法表示的数字. n在0~20之间 var g=1.023; var f=g.toFixed(2); f的值为:1.02, typeof ...
- Perl中的哈希(四)
Perl中的哈希数据结构.相比较于数组,这种数据结构对于数据查找和统计更加方便. 一个特殊的哈希,%ENV,表示当前terminal下,通过setenv设置的variable的键值. 键:环境变量名, ...
- ServiceStack DotNet Core前期准备
下载DotNet Core SDK 下载地址:https://dotnet.microsoft.com/download. 安装完成之后通过cmd的命令行进行确认. 官方自带的cmd比较简陋,可以用c ...
- 谷歌浏览器使用IE内核
经常使用谷歌浏览器去到处溜达,可是,居然还不知道谷歌浏览的还有很多新鲜的设置,昨天遇到了调试一个脚本没有出现效果,而在IE中就可以显示所谓的效果: 查询了下,看到谷歌浏览器确实对脚本的部分样式要求还是 ...
- 绘制loss曲线
第一步保存日志文件,用重定向即可: $TOOLS/caffe train --solver=$SOLVERFILE >& |tee out.log 第二步直接绘制: python plo ...
- Scrapy: 初识Scrapy
1.初识Scrapy Scrapy是为了爬取网站数据,提取结构性数据而编写的应用框架.可以应用在包括数据挖掘,信息处理或者存储历史数据等一系列的程序中. 2.选择一个网站 当需要从某个网站获取信息时, ...
- 用Python实现随机森林算法,深度学习
用Python实现随机森林算法,深度学习 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.bagging(bootstrap aggregating 的缩 ...
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...