Fragment生命周期-基于实验的最新总结

现在很多应用的开发都是基于FragmentActivity中嵌套Fragment进行开发的,所以,如果我们能够清晰地知道他们的生命周期,那么会使我们的开发变的容易。

对于Activity的生命周期,我在之前的文章 Activity生命周期-基于实验的最新总结  中已经说的很详细了,因此本篇文章只是从实践角度来讲一下Fragment的生命周期以及Fragment与Activity生命周期的对应关系,像大多数介绍Fragment生命周期的文章一样,先上两张图:

好,言归正传

这里从实例的角度来说明一下Activity与Fragment生命周期的关系

假设我们的Activity为MainActivity,在Activity中有两个Fragment:一个叫做HomeFragment(默认打开的页面),一个叫做UserInfoFragment

现在通过场景模拟的方式来看一下他们的关系

场景1首次启动应用,而Activity默认打开的页面为HomeFragment

场景2关闭电源键(屏幕灭掉)

场景3 屏幕解锁

场景4 第一次切换到UserInfoFragment

场景5
HomeFragment与UserInfoFragment来回切换

若添加Fragment的方法如下:

	private void showFragment(String tag) {
		FragmentManager fm = getSupportFragmentManager();
		FragmentTransaction ft = fm.beginTransaction();
		if (!TextUtils.isEmpty(curFragmentTag)) {
			Fragment f = fm.findFragmentByTag(curFragmentTag);
			if (f != null) {
				ft.hide(f);
			}
		}
		Fragment fragment = fm.findFragmentByTag(tag);
		if (fragment == null) {
			ft.add(R.id.main_layout, getFragmentInstance(tag), tag);
		} else {
			ft.show(fragment);
		}
		ft.commit();
		curFragmentTag = tag;
	}

则:

若将添加fragment的方法从add变成replace,则每次切换都会:(假设从HomeFragment切换到UserInfoFragment)

其实,这里就引出了一个问题:

如果使用replace的话,每次切换的时候,Fragment都会被重新实例化,重新加载一遍数据,这样会非常消耗性能和用户的数据流量,replace一般是在上一个Fragment不再

使用的情况下采用。如果我们不想反复实例化Fragment,则可以使用add方法,切换时hide当前的Fragment,然后再add另一个Fragment,再次切换的时候,只需要hide当前的Fragment,然后show另一个。

场景6 按home键回到桌面(假设当前切换到HomeFragment)

场景7 从桌面返回到应用

其实发现流程跟关闭打开电源键一样

场景8 退出应用(前提是HomeFragment和UserInfoFragment的实例都已经创建,而且是采用add方法添加)

总结:

管理fragment的生命周期有些像管理activity的生命周期。Fragment可以生存在三种状态:

Resumed:

Fragment在一个运行中的activity中并且可见。

Paused:

另一个activity处于最顶层,但是fragment所在的activity并没有被完全覆盖(顶层的activity是半透明的或不占据整个屏幕)。

Stoped:

Fragment不可见。可能是它所在的activity处于stoped状态或是fragment被删除并添加到后退栈中了。此状态的fragment仍然存在于内存中。

同样类似于activity,你可以把fragment的状态保存在一个Bundle中,在activity被recreated时就需用到这个东西。你可以在onSaveInstanceState()方法中保存状态并在onCreate()或onCreateView()或onActivityCreated()中恢复。

Fragment与Activity的生命周期中最大的不同就是存储到后退栈中的过程。Activity是在停止时自动被系统压入停止栈,并且这个栈是被系统管理的;而fragment是被压入activity所管理的一个后退栈,并且只有你在删除fragment后并明确调用addToBackStack()方法时才被压入。

然而,管理fragment的生命周期与管理activity的生命周期极其相似。你所需要去思考的是activity的生命周期如何影响fragment的生命周期。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 12:55:11

Fragment生命周期-基于实验的最新总结的相关文章

Activity生命周期-基于实验的最新总结

不说太多废话,先上两张最基本的图吧 简单说明一下: 1. onCreate() 它会在活动第一次被创建的时候调用.你应该在这个方法中完成活动的初始化操作,比如说加载布 局.绑定事件等. 2. onStart() 这个方法在活动由不可见变为可见的时候调用. 3. onResume() 这个方法在活动准备好和用户进行交互的时候调用.此时的活动一定位于返回栈的 栈顶,并且处于运行状态. 4. onPause() 这个方法在系统准备去启动或者恢复另一个活动的时候调用.我们通常会在这个方 法中将一些消耗 

Fragment生命周期详解

Fragment生命周期详解 1. Fragment概述 Fragment从Android v3.0版本开始引入 随着界面布局的复杂化,处理起来也更加的复杂,引入Fragment可以把activity拆分成各个部分.每个Fragment都有它自己的布局和生命周期.方便了开发. 采用fragment而不是activity进行应用的UI管理,可绕开Android系统activity规则的限制. fragment是一种控制器对象,activity可委派它完成一些任务通常这些任务就是管理用户界面.受管的

打入电话时Fragment生命周期

Activity初次加载: MainActivity--->onCreate Mfragment---->onAttach Mfragment---->onCreate Mfragment---->onCreateView Mfragment---->onActivityCreated MainActivity--->onStart Mfragment---->onStart MainActivity--->onResume Mfragment---->

fragment生命周期及优点

fragment生命周期切换到该FragmentonAttach—> onCreate-> onCreateView—> onActivityCreated-> onStart-> onResume切换到其他Fragment:onPause-> onStop-> onDestroyView切换回本身的Fragment:onCreateView-> onActivityCreated-> onStart-> onResume显示Fragment时(

Fragment生命周期及其使用

Fragment是随着Android 3.0推出时携带的一部分,若是在1.6版本中使用,必须引入相应的支持包.Fragment最大的优点是你可以根据不同设备的屏幕大小创建动态的UI.Fragment有以下几个特点. 每个Fragment是个独立的模块 与其所在的Activity紧密的联系在一起 多个Activity可以共用一个Activity 1.Fragment生命周期. 首先来看下Fragment的生命周期,Fragment的生命周期和他所在的Activity的生命周期紧密联系在一起.因此看

关于fragment生命周期的两张图片

图1,fragment的生命周期,图2,fragment生命周期对应activity的生命周期

Fragment生命周期(转)

Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上--例如平板电脑上,支持更加动态和灵活的UI设计.平板电脑的屏幕要比手机的大得多,有更多的空间来放更多的UI组件,并且这些组件之间会产生更多的交互.Fragment允许这样的一种设计,而不需要你亲自来管理viewhierarchy的复杂变化. 通过将activity的布局分散到fragment中, 你可以在运行时修改activity的外观,并在由activity管理的back stack中保存那些变化. 例如, 一

Activity生命周期和Fragment生命周期

工作时间不短了,却没怎么总结过.一直想对android的学习做个记录,那从这儿起吧.从最基础的知识一点点开始.很多内容是从大神那里搜罗来的. 一.Fragment生命周期图 二.Activity与Fragment生命周期比较

Android Activity生命周期以及Fragment生命周期的区别与分析

Android Fragment生命周期图: Activity生命周期图: 对照图: Fragment生命周期分析: 1. 当一个fragment被创建的时候,它会经历以下状态. onAttach() onCreate() onCreateView() onActivityCreated() 2. 当这个fragment对用户可见的时候,它会经历以下状态. onStart() onResume() 3. 当这个fragment进入“后台模式”的时候,它会经历以下状态. onPause() onS