Android Activity 生命周期的透彻理解

说来惭愧,虽然已经做了一年多的android开发,但是最近被人问起activity的生命周期的时候,却感觉自己并不能很自信很确定的回答对方的问题,对activity的生命周期的理解还不透彻啊。
     既然发现了问题,那咱就得解决问题,不就个生命周期,能有多复杂。

首先看看android developers 网上的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().

http://www.cnblogs.com/hibraincol/archive/2012/03/06/2382120.html

Android Activity 生命周期的透彻理解,布布扣,bubuko.com

时间: 2024-12-26 21:21:47

Android Activity 生命周期的透彻理解的相关文章

Android Activity生命周期 onSaveInstanceState和onRestoreInstanceState

当某个activity变得"容易"被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候. 注意上面的双引号,何为"容易"?言下之意就是该activity还没有被销毁,而仅仅是一种可能性.这种可能性有哪些?通过重写一个activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我们可以清

Android Activity生命周期图解

Android 中 Activity生命周期 从网上摘的 事件回调方法  以下1-4 不可终止 . 1. onCreate()   :Activity 启动后第一个被调用的方法 ,常用来进行Activity的初始化,例如创建View.绑定数据或者恢复信息等 .. (? oncreate 可以恢复什么信息 ) 2. onStart() : 当Activity显示在屏幕上时,该方法被调用 3. onRestart() :当Activity从停止状态进入活动状态前,调用该方法 . 4.onResume

两分钟彻底让你明白Android Activity生命周期(图文)!

首先看一下Android api中所提供的Activity生命周期图(不明白的,可以看完整篇文章,在回头看一下这个图,你会明白的): Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码: 1 public class Activity extends ApplicationContext { 2         protected void onCreate(Bundle savedInstanceState);        3       

Activity生命周期的通俗理解

一般一个Activity有三种状态: 1.在屏幕上是可见的且可操作的,他是活跃或运行状态,负责响应用户操作. 2.失去焦点但仍然可见时,他处于暂停状态.也就是说未被完全遮蔽,所以该Activity仍对用户可见,但是当系统处于繁忙的时候下,有肯会杀死该Activity. 3.完全被另一个Activity覆盖时处于停止状态.也有可能被杀死. Activity生命周期中各方法的调用情况 1.onCreate(Bundle savedStatus):第一次创建时调用,只调用一次. 2.onStart()

Android Activity生命周期的几个问题

每一个Android开发者都应该知道,android系统有四个重要的基本组件,即Activity(活动).Service(服务).Broadcast Receive(广播接收器)和Content Provider(内容提供器),其中,Activity是最重要的组件,打开你手机上的APP,你眼睛所能看到的都是Activity,下面将会介绍关于Activity生命周期的几个问题. 1 Activity生命周期的8个回调函数 下图是Activity的生命周期图,相信许多人都看过不止一次,但有的人是看到

Android Activity生命周期都该做哪些事情?

Android系统根据生命周期的不同阶段唤起对应的回调函数来执行代码.系统存在启动与销毁一个activity的一套有序的回调函数.本节来讨论下不同生命周期的回调函数里都该做哪些事情,不该做哪些事情. 理解生命周期的回调 在一个activity的生命周期中,系统会像金字塔模型一样去调用一系列的生命周期回调函数.Activity生命周期的每一个阶段就像金字塔中的台阶.当系统创建了一个新的activity实例,每一个回调函数会向上一阶移动activity状态.处在金字塔顶端意味着当前activity处

Android——Activity生命周期(转)

Activity生命周期 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精髓. 近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下. 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方

Android Activity 生命周期

生命周期流程图: 相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运

Activity生命周期(深入理解)

今天看到一篇大神总结Activity的文章,内容甚为详细,特此转载http://www.cnblogs.com/lwbqqyumidi/p/3769113.html Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity生命周期进行一次总结. Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activ