zoukankan      html  css  js  c++  java
  • Android Activity生命周期以及Fragment生命周期的区别与分析

    Android Fragment生命周期图:

    Activity生命周期图:

    对照图:

    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分离的时候,调用这个方法。

    一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activity在resumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。

    Activity生命周期分析:

     

    上面7个生命周期方法分别在4个阶段按着一定的顺序进行调用,这4个阶段如下:

    1.  开始Activity:在这个阶段依次执行3个生命周期方法:onCreate、onStart和onResume。
    2.  Activity失去焦点:如果在Activity获得焦点的情况下进入其他的Activity或应用程序,这时当前的Activity会失去焦点。在这一阶段,会依次执行onPause和onStop方法。
    3. Activity重新获得焦点:如果Activity重新获得焦点,会依次执行3个生命周期方法:onRestart、onStart和onResume。
    4.  关闭Activity:当Activity被关闭时系统会依次执行3个生命周期方法:onPause、onStop和onDestroy。

    如果在这4个阶段执行生命周期方法的过程中不发生状态的改变,那么系统会按着上面的描述依次执行这4个阶段中的生命周期方法,但如果在执行的过程中改变了状态,系统会按着更复杂的方式调用生命周期方法。

    在执行的过程中可以改变系统的执行轨迹的生命周期方法是onPause和onStop。如果在执行onPause方法的过程中Activity重新获得了焦点,然后又失去了焦点。系统将不会再执行onStop方法,而是按着如下的顺序执行相应的生命周期方法:

    onPause -> onResume-> onPause

    如果在执行onStop方法的过程中Activity重新获得了焦点,然后又失去了焦点。系统将不会执行onDestroy方法,而是按着如下的顺序执行相应的生命周期方法:

    onStop -> onRestart -> onStart -> onResume -> onPause -> onStop

     在图2所示的Activity生命周期里可以看出,系统在终止应用程序进程时会调用onPause、onStop和onDesktroy方法。而onPause方法排在了最前面,也就是说,Activity在失去焦点时就可能被终止进程,而onStop和onDestroy方法可能没有机会执行。因此,应该在onPause方法中保存当前Activity状态,这样才能保证在任何时候终止进程时都可以执行保存Activity状态的代码。

  • 相关阅读:
    django orm 以列表作为筛选条件进行查询
    申请Let's Encrypt通配符HTTPS证书
    redis集群部署及踩过的坑
    MySQL的索引是什么?怎么优化?
    Session管理之超时设置和强制下线
    在MySQL中使用explain查询SQL的执行计划
    基于Docker搭建MySQL主从复制
    这些年一直记不住的 Java I/O
    高并发大容量NoSQL解决方案探索
    php 如何生成静态页
  • 原文地址:https://www.cnblogs.com/zzw1994/p/4985434.html
Copyright © 2011-2022 走看看