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中常用命令行工具(一)
  • 相关阅读:
    Working with macro signatures
    Reset and Clear Recent Items and Frequent Places in Windows 10
    git分支演示
    The current .NET SDK does not support targeting .NET Core 2.1. Either target .NET Core 2.0 or lower, or use a version of the .NET SDK that supports .NET Core 2.1.
    Build website project by roslyn through devenv.com
    Configure environment variables for different tools in jenkins
    NUnit Console Command Line
    Code Coverage and Unit Test in SonarQube
    头脑王者 物理化学生物
    头脑王者 常识,饮食
  • 原文地址:https://www.cnblogs.com/nokiaguy/p/1728032.html
Copyright © 2011-2022 走看看