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-生命周期的更多相关文章

  1. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  2. Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment)

    我为什么不主张使用Fragment Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 ) 生命周期回调说明: onAttach ...

  3. Android之Fragment学习笔记②(Fragment生命周期)

    一. Fragment生命周期图                                  二.Fragment生命周期方法介绍 Fragment的生命周期和activity生命周期很像,其生 ...

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

    Android Fragment生命周期图: Activity生命周期图: 对照图: Fragment生命周期分析: 1. 当一个fragment被创建的时候,它会经历以下状态. onAttach() ...

  5. Fragment(四)Fragment生命周期分析(转)

    Fragment(四)Fragment生命周期分析 转载请注明:http://blog.csdn.net/liaoqianchuan00/article/details/24271607   例子一 ...

  6. Fragment生命周期与Fragment执行hide、show后的生命周期探讨

    一.Fragment 生命周期中的每个方法的意义与作用: 1.setUserVisibleHint()(此方法不属于生命周期方法):设置Fragment 用户可见或不可见时调用此方法,此方法在Frag ...

  7. Fragment生命周期以及使用时的小问题

    前言- 昨天在写UI的时候用到了FRAGMENT,发现自己对此还不是非常了解,借此机会记录一下 Fragment的生命周期- 官方生命周期图: Fragment每个生命周期方法的意义.作用- onVi ...

  8. Fragment 生命周期的详情

    Fragment每个生命周期方法的意义.作用(注意红色的不是生命周期方法):setUserVisibleHint():设置Fragment可见或者不可见时会调用此方法.在该方法里面可以通过调用getU ...

  9. Android Fragment 生命周期及其正确使用(建议使用自定义View替换Fragment)

    使用Fragment 官方例子中显示: 例如:一个学生Fragment,需要传入studentId,进行http请求显示,那么setArguments后防止杀掉Fragment后,参数为0,显示不了数 ...

  10. 面试 -- fragment生命周期

    Android 3.0 (Api 11)引入: Fragment具有重用,易适配(平板和手机之间的)优点: 依赖Activity,生命周期受到Activity的生命周期影响: fragment生命周期 ...

随机推荐

  1. C# 使用指针将不同值类型赋值到字节数组中

    C#指针操作字节数组 Demo(以添加short类型的值为例): //bytes:目标字节数组; offset:目标在字节数组的位置; value:添加的类型值public static unsafe ...

  2. 《剑指offer》链表中倒数第k个结点

    一.题目描述 输入一个链表,输出该链表中倒数第k个结点. 二.输入描述 一个链表 三.输出描述 链表的倒数第k个结点 四.牛客网提供的框架 /* struct ListNode { int val; ...

  3. Mojo For Chromium Developers1

    Mojo For Chromium Developers Overview This document contains the minimum amount of information neede ...

  4. [USACO5.4]奶牛的电信Telecowmunication(网络流)

    P1345 [USACO5.4]奶牛的电信Telecowmunication 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮 ...

  5. Redis报错 : (error) NOAUTH Authentication required.

    原文:Redis报错 : (error) NOAUTH Authentication required. 这个错误是因为没有用密码登陆认证 , 先输入密码试试 . 127.0.0.1:6379> ...

  6. eclipse maven install 时控制台乱码问题解决

    pom.xml文件中加入: <properties> <argLine>-Dfile.encoding=UTF-8</argLine> <project.bu ...

  7. 多校第十场1009 CRB and String题解

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5414 题意:给你两个字符串s和t,你能够在字符串s中随意选一个字符c,在该字符c后插入一个字符d(d! ...

  8. 从C10K到C10M高性能网络的探索与实践

    在高性能网络的场景下,C10K是一个具有里程碑意义的场景,15年前它给互联网领域带来了非常大的挑战.发展至今,我们已经进入C10M的场景进行网络性能优化. 这期间有怎样的发展和趋势?环绕着各类指标分别 ...

  9. poj--2391--Ombrophobic Bovines(floyd+二分+最大流拆点)

    Ombrophobic Bovines Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u ...

  10. .net数字转换成汉字大写

    public class Num2Rmb { private String[] hanArr={"零","壹","贰","叁&qu ...