zoukankan      html  css  js  c++  java
  • 新书内容连载(2):Android Activity的生命周期

    本文为原创,如需转载,请注明作者和出处,谢谢!

    本文为新书《Android/OPhone 开发完全讲义》的内容连载。《Android/OPhone开发完全讲义》一书现已出版,敬请关注。

    购 买:互动网

    《Android/OPhone 开发完全讲义》目录

    源代码下载


    上一篇:新书内容连载(1):自定义Android组件之带图像的TextView

    Activity从建立到销毁的过程中需要在 不同的阶段调用7个 生命周期方法。这7个 生命周期方法的定义如下:

    protected void onCreate(Bundle savedInstanceState)
    protected void onStart()
    protected void onResume()
    protected void onPause()
    protected void onStop()
    protected void onRestart()
    protected void onDestroy()

    上面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个阶段中的生命周期方法,但如果在执行的过程中改变了状态,系统会按着更复杂的方式调用生命周期方 法。

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

    onPause -> onResume-> onPause

    如果在执行onStop方法的过程中Activity重新获得了焦点,然后又失 去了焦点。系统将不会执行onDestroy方法,而是按着如下的顺序执行相应的生命周期方法:
    onStop -> onRestart -> onStart -> onResume -> onPause -> onStop
    1详细描述了这一过程。

    图1  Activity的生命周期

        从图1所 示的Activity生命周期不难看出,在这个图中包含了两层循环,第一层循环是onPause -> onResume -> onPause,第二层循环 是onStop -> onRestart -> onStart -> onResume -> onPause -> onStop。我们可以将这两层循环看成是整合Activity生命周期中的子生命周期。 第一层循环称为焦点生命周期,第二层循环称为可视生命周期。也就是说,第一层循环在Activity焦点的获得与失去的过程中循环,在这一过程中,Activity始终是可见的。而第二层循环 是在Activity可见与不可见的过程中循环,在这个过程中伴随着Activity的焦点的获得与失去。也就是说,Activity首先会被显示,然后会获得焦点,接着失去焦点,最后由于弹出其他的Activity,使当前的Activity变成不可见。因此,Activity有如下3种生命周期:

    1. 整体生命周期:onCreate -> ... ... -> onDestroy。
    2. 可视生命周期:onStop -> ... ... -> onPause。
    3. 焦点生命周期:onPause -> onResume。

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

    下一篇:新书内容连载(3):Android SDK中常用命令行工具(一)
  • 相关阅读:
    PAT 甲级 1015 Reversible Primes (20 分) (进制转换和素数判断(错因为忘了=))
    『Spring.NET+NHibernate+泛型』框架搭建之DAO(三)★
    (C#)使用队列(Queue)解决简单的并发问题
    VB.NET多线程入门
    Machine Learning With Spark学习笔记(在10万电影数据上训练、使用推荐模型)
    JAVA 并发编程-多个线程之间共享数据(六)
    POJ 3087 Shuffle'm Up(模拟)
    cocos2dx --- 富文本的使用 RichText
    <LeetCode OJ> 217./219. Contains Duplicate (I / II)
    java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
  • 原文地址:https://www.cnblogs.com/nokiaguy/p/1728032.html
Copyright © 2011-2022 走看看