新书内容连载(2):Android中的Activity的生命周期

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

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

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

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

protected void onCreate(BundlesavedInstanceState)
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生命周期里可以看出,系统在终止应用程序进程时会调用onPauseonStoponDesktroy方法。而onPause方法排在了最前面,也就是说,Activity在失去焦点时就可能被终止进程,而onStoponDestroy方法可能没有机会执行。因此,应该在onPause方法中保存当前Activity状态,这样才能保证在任何时候终止进程时都可以执行保存Activity状态的代码。





Android开发完全讲义(第2版)(本书版权已输出到台湾)

http://product.dangdang.com/product.aspx?product_id=22741502



Android高薪之路:Android程序员面试宝典 》http://book.360buy.com/10970314.html


新浪微博:http://t.sina.com.cn/androidguy 昵称:李宁_Lining

更多相关文章

  1. Android 设备root 原理及方法
  2. Android多进程app中Application回调onCreate()方法被执行多次分
  3. 【转】Ubuntu下Adb调试Android找不到设备的解决方法
  4. [读书笔记]布局的屏幕适配常用方法
  5. 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬
  6. Android使用JNI生成.so文件并调用(使用传统生成.h的方法)
  7. android studio运行编译速度慢的解决方法

随机推荐

  1. [转]android:layout_gravity 和 android:
  2. Android系列教程(3):Android(安卓)SDK中常用
  3. Android面试题集(2019-04-04总结)
  4. Android(安卓)系统及framework 概述
  5. 浅析Android单线程模型
  6. A folder failed to be renamed or moved
  7. 浅析Android手机卫士接收短信指令执行相
  8. [003] 写给准备学习Android的朋友
  9. Android(安卓)动画标签——scale
  10. Android与JavaScript方法相互调用