Fragment-生命周期
Fragment生命周期图

一、Fragment的几种状态:
与Activity类似,Fragment也有一下几种状态:
· 活动状态:当前Fragment位于前台,可见,可获得焦点。
· 暂停状态:其他Activity位于前台,该Fragment可见,不可获得焦点。
· 停止状态:不可见,失去焦点。
· 销毁状态:该Fragment被完全删除或被结束。
二、Fragment的回调方法:
在Fragment的生命周期中,有一下方法会被回调:
·
1. 当一个fragment被创建的时候,它会经历以下状态.
- onAttach()
- onCreate()
- onCreateView()
- onActivityCreated()
2. 当这个fragment对用户可见的时候,它会经历以下状态。
- onStart()
- onResume()
3. 当这个fragment进入“后台模式”的时候,它会经历以下状态。
- onPause()
- onStop()
4. 当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态。
- onPause()
- onStop()
- onDestroyView()
- onDestroy() // 本来漏掉类这个回调,感谢xiangxue336提出。
- onDetach()
5. 就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。
- onCreate()
- onCreateView()
- onActivityCreated()
6. fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。
- onAttached() —— 当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。
- onCreateView() —— 当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。
- onActivityCreated() —— 当activity的onCreated()方法返回后调用此方法
- onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
- onDetach() —— 当fragment和activity分离的时候,调用这个方法。
三、Fragment生命周期实例
Activity的代码如下:
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends Activity {
private final String TAG = "cui"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Log.i(TAG,"Activity-----onCreate");
} @Override
protected void onStart() {
super.onStart();
Log.i(TAG,"Activity-----onStart");
} @Override
protected void onResume() {
super.onResume();
Log.i(TAG,"Activity-----onResume");
} @Override
protected void onPause() {
super.onPause();
Log.i(TAG,"Activity-----onPause");
} @Override
protected void onStop() {
super.onStop();
Log.i(TAG,"Activity-----onStop");
} @Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG,"Activity-----onDestroy");
}
}
Fragment代码如下:
package com.jkxy.fragmentdemo; import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; /**
* Created by cuishuang on 16/7/29.
*/
public class TitleFragment extends Fragment { private final String TAG = "cui";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.i(TAG,"Fragment------onCreateView");
return inflater.inflate(R.layout.fragment_title,container,false);
} @Override
public void onAttach(Context context) {
super.onAttach(context);
Log.i(TAG,"Fragment------onAttach");
} @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG,"Fragment------onCreate");
} @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.i(TAG,"Fragment------onActivityCreated");
} @Override
public void onStart() {
super.onStart();
Log.i(TAG,"Fragment------onStart");
} @Override
public void onResume() {
super.onResume();
Log.i(TAG,"Fragment------onResume");
} @Override
public void onPause() {
super.onPause();
Log.i(TAG,"Fragment------onPause");
} @Override
public void onStop() {
super.onStop();
Log.i(TAG,"Fragment------onStop");
} @Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG,"Fragment------onDestroy");
} @Override
public void onDetach() {
super.onDetach();
Log.i(TAG,"Fragment------onDetach");
}
}
当启动Activity的时候走的Log日志:
07-29 11:52:40.937 20599-20599/? I/cui: Fragment------onAttach
07-29 11:52:40.937 20599-20599/? I/cui: Fragment------onCreate
07-29 11:52:40.938 20599-20599/? I/cui: Fragment------onCreateView
07-29 11:52:40.953 20599-20599/? I/cui: Activity-----onCreate
07-29 11:52:40.953 20599-20599/? I/cui: Fragment------onActivityCreated
07-29 11:52:40.959 20599-20599/? I/cui: Activity-----onStart
07-29 11:52:40.959 20599-20599/? I/cui: Fragment------onStart
07-29 11:52:40.959 20599-20599/? I/cui: Activity-----onResume
07-29 11:52:40.959 20599-20599/? I/cui: Fragment------onResume
当销毁的时候走的Log日志:
07-29 11:53:20.794 21186-21186/? I/cui: Fragment------onAttach
07-29 11:53:20.794 21186-21186/? I/cui: Fragment------onCreate
07-29 11:53:20.795 21186-21186/? I/cui: Fragment------onCreateView
07-29 11:53:20.798 21186-21186/? I/cui: Activity-----onCreate
07-29 11:53:20.798 21186-21186/? I/cui: Fragment------onActivityCreated
07-29 11:53:20.798 21186-21186/? I/cui: Activity-----onStart
07-29 11:53:20.798 21186-21186/? I/cui: Fragment------onStart
07-29 11:53:20.798 21186-21186/? I/cui: Activity-----onResume
07-29 11:53:20.798 21186-21186/? I/cui: Fragment------onResume
总结:启动的时候是先走Activity接着是Fragment,退出销毁的时候先走Fragment再走Activity
Fragment-生命周期的更多相关文章
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment)
我为什么不主张使用Fragment Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 ) 生命周期回调说明: onAttach ...
- Android之Fragment学习笔记②(Fragment生命周期)
一. Fragment生命周期图 二.Fragment生命周期方法介绍 Fragment的生命周期和activity生命周期很像,其生 ...
- Android Activity生命周期以及Fragment生命周期的区别与分析
Android Fragment生命周期图: Activity生命周期图: 对照图: Fragment生命周期分析: 1. 当一个fragment被创建的时候,它会经历以下状态. onAttach() ...
- Fragment(四)Fragment生命周期分析(转)
Fragment(四)Fragment生命周期分析 转载请注明:http://blog.csdn.net/liaoqianchuan00/article/details/24271607 例子一 ...
- Fragment生命周期与Fragment执行hide、show后的生命周期探讨
一.Fragment 生命周期中的每个方法的意义与作用: 1.setUserVisibleHint()(此方法不属于生命周期方法):设置Fragment 用户可见或不可见时调用此方法,此方法在Frag ...
- Fragment生命周期以及使用时的小问题
前言- 昨天在写UI的时候用到了FRAGMENT,发现自己对此还不是非常了解,借此机会记录一下 Fragment的生命周期- 官方生命周期图: Fragment每个生命周期方法的意义.作用- onVi ...
- Fragment 生命周期的详情
Fragment每个生命周期方法的意义.作用(注意红色的不是生命周期方法):setUserVisibleHint():设置Fragment可见或者不可见时会调用此方法.在该方法里面可以通过调用getU ...
- Android Fragment 生命周期及其正确使用(建议使用自定义View替换Fragment)
使用Fragment 官方例子中显示: 例如:一个学生Fragment,需要传入studentId,进行http请求显示,那么setArguments后防止杀掉Fragment后,参数为0,显示不了数 ...
- 面试 -- fragment生命周期
Android 3.0 (Api 11)引入: Fragment具有重用,易适配(平板和手机之间的)优点: 依赖Activity,生命周期受到Activity的生命周期影响: fragment生命周期 ...
随机推荐
- Android-加载大图避免OOM
高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是 ...
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(4)
2.4 调整检查点和XLOG 目前为止,这一章已经提供深入洞察PostgreSQL如何写入数据,一般来说,XLOG是用来干什么的.考虑到这方面的知识,我们现在可以继续并学习我们能做些什么来使我们的数据 ...
- 关于table布局
html-table 宝贝 状态 单价 数量 商品总价 运费 1sdsdf 2 3fffff 4sdfsfsffsdfs 5dsfs 6
- TrueOS 不再想要成为“桌面 BSD”了
作者: John Paul Wohlscheid 译者: LCTT geekpi | 2018-07-13 22:53 TrueOS 很快会有一些非常重大的变化.今天,我们将了解桌面 BSD 领域将会 ...
- linux命令find命令详解
find 查找文件 find 哪里 什么类型 什么名字 -maxdepth 最大的深度 查找目录的最大深度 find -maxdepth 1 -type d -type 找什么类型的 f fil ...
- P4555 [国家集训队]最长双回文串(回文树)
题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同). 输入长度为 n 的串 S ,求 S 的最长双回文子串 T ,即可 ...
- spring data jpa实体类映射配置
@Entity:用来标志实体类,知名这是一个和数据库表映射的实体类 @Id注解指明这个属性映射为数据库的主键 @GeneratedValue注解默认使用主键生成方式为自增,hibernate会自动生成 ...
- 【Codeforces Round #239 (Div. 1) A】Triangle
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 最后的直角三角形可以通过平移,将直角顶点移动到坐标原点. 然后我们只要枚举另外两个点其中一个点的坐标就好了. x坐标的范围是[1.. ...
- 【Henu ACM Round#16 F】Om Nom and Necklace
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] KMP算法可以把"i前缀"pre[i] 分成ssssst的形式 这里t是s的前缀. 然后s其实就是pre[i]中 ...
- cacti1.1安装报错
安装过程中出现以下报错: ERROR: Your MySQL TimeZone database is not populated. Please populate this database bef ...