• 关于 Activity 生命周期的理解

    Activity的运作
    服务器君一共花费 9.253 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    前面提到了 Activity 在 Android 里的重要性,既然重要我们得好好深入理解一下。对于 Activity,我们需要弄懂的一个重要知识点是,它的生命周期。

    首先看一下Android api中所提供的 Activity 生命周期图:

    activity启动的时候:onCreate -> onStart -> onResume 这个过程不用多说,大家都知道。

    这里要讲的是, 何时onPause,何时onStop,何时onDestory; 以及恢复的时候,何时onRestart,何时onResume。

    为了方便说明这里把当前activity称为MainActivity,其他的activity称为SecondActivity、ThirdActivity等等。

    通过上图的我们可以看出activity从running状态跳转到onPause状态的原因是:Another activity comes into the foreground. 也就是说有另外一个actvity被启动并运行了,比如说MainActivity通过startActivity启动了SecondActivity,那么SecondActivity就在ui视图的最顶层了,而MainActivity不再是最顶层的activity了,此时就会onPause了,此时我们依稀还能看到MainActivity,只是MainActivity已经站在他人之后了。

    而当MainActivity完全被SecondActivity挡住,完全看不见的时候,此时MainActivity就会onStop了。我们看看上图从onPause到onStop的原因是:the activity is no longer visiable. 也就是说此时MainActivity完全不可见了,从这里我们可以猜测当按下home键的时候,当前activity就会处于onStop的状态。

    从actvitiy的生命周期图中,我们可以看出activity是可以停留在onPause和onStop在这两个状态上的,因为可以相应的恢复。

    那么何时停留在onPause,何时停留在onStop呢?

    下图的MainActivity就是处于onPause状态:

    因为这里的second actvity是dialog样式:

    <activity android:name=".SecondActivity" android:theme="@android:style/Theme.Dialog">
    

    也就验证了当MainActivity不再在最顶端,但仍然可见的时候,MainActivity就处于onPause状态,此时如果退出(back键)second activity,那么MainActivity就会onResume。

    下图的MainActivity就是处于onStop状态(注意,这里的third activity 是在 MainActivity中通过startActivity启动的):

    因为此时MainActivity已经完完全全被Thrid actvity挡住了,完全不可见了,所以MainActivity处于onStop状态,如果此时退出Thrid activity(back键),那么MainActivity就会onRestart().

    何时onDestory呢?

    当在MainActivity中按back键,退出时,最终就会走到onDestory,或者在代码中调用finish()的时候也会走到onDestroy这一步。 

    对于 Activity 生命周期图的左侧部分:

    当MainActivity处于onPause和onStop状态时,当更高优先级的apps需要内存,而此时系统内存不够了,那么android系统就会将MainActivity所在的进程给杀了以释放资源。

    当然被杀了之后,想重生,那必须得从头来过: onCreate ---> onStart() ---> onResume().

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [移动开发] Android布局中的一些常用控件 2 个条目
  2. [搜索引擎优化] 与百度权重有关的信息 2 个条目
  3. [运维管理] 路由器与交换机 4 个条目
  4. [搜索引擎优化] 百度搜索引擎优化指南 3 个条目
  5. [软件工程与项目管理] 浏览器的CSS解析 7 个条目
  6. [PHP程序设计] htaccess 设置技巧 6 个条目
  7. [移动开发] Android里的ContentValues 2 个条目
  8. [移动开发] Android根基概念Context 8 个条目
  9. [数据库技术] MySQL中英文混合排序 4 个条目
  10. [数据库技术] 无限级分类数据表设计 4 个条目
  11. [计算机算法] 两数交换的各种算法细节 2 个条目
  12. [移动开发] 从代码角度去认识HttpClient 2 个条目
窗口 -- [协会]