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

在执行的过程中可以改变系统的执行轨迹的生 命周期方法是 onPause onStop 。如果在执行 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 状态的代码。


目录
相关文章
|
20小时前
|
Android开发 开发者
Android UI设计: 请解释Activity的Theme是什么,如何更改应用程序的主题?
Android UI设计: 请解释Activity的Theme是什么,如何更改应用程序的主题?
46 1
|
20小时前
|
数据库 Android开发 开发者
Android基础知识:请解释Activity的生命周期。
Android基础知识:请解释Activity的生命周期。
47 2
|
8月前
|
Android开发
Android一些特殊情况下的生命周期分析
Android一些特殊情况下的生命周期分析
46 0
|
7月前
|
存储 SQL 人工智能
Android Activity启动流程一:从Intent到Activity创建
Android Activity启动流程一:从Intent到Activity创建
|
20小时前
|
XML Java Android开发
利用Bundle实现Android Activity间消息的传递
利用Bundle实现Android Activity间消息的传递
11 2
|
20小时前
|
Android开发 数据库管理
Android如何在Activity和Service之间传递数据
Android如何在Activity和Service之间传递数据
11 3
|
20小时前
|
Shell Android开发
Android Activity重写dump方法实现通过adb调试代码
Android Activity重写dump方法实现通过adb调试代码
14 0
|
20小时前
|
Java Android开发
Android四大组件之Activity组件
Android四大组件之Activity组件
|
20小时前
|
Android开发
[Android 四大组件] --- Activity
[Android 四大组件] --- Activity
25 1
|
20小时前
|
Android开发
Android基础知识:什么是Fragment?与Activity的区别是什么?
Android基础知识:什么是Fragment?与Activity的区别是什么?
353 54