Activity的生命周期

来源:互联网 发布:苏联巅峰 知乎 编辑:程序博客网 时间:2024/06/05 14:15

Activity的生命周期

 Activity 是用户唯一可以看得到的东西。几乎所有的activity都与用户进行交互,所以Activity主要负责的就是创建显示窗口,你可以在这些窗口里使用setContentView(View)来显示你自己的UI。activity展现在用户面前的经常是全屏窗口,你也可以将activity作为浮动窗口来使用(使用设置了windowIsFloating的主题),或者嵌入到其他的activity(使用ActivityGroup)中。系统中的Activity可以通过一个activity栈来进行管理。当一个新的activity启动的时候,它首先会被放置在activity栈顶部并成为running状态的activity —— 之前的activity也在activity栈中,但总是被保存在它的下边,只有当这个新的activity退出以后之前的activity才能重新回到前景界面。

所有的activity本质上有四种状态:
activity在屏幕的前景中(activity栈的顶端),它是active或者running状态。
activity失去了焦点但是仍然可见(这个activity顶上遮挡了一个透明的或者非全屏的activity),它的状态是paused。一个paused状态的activity完全是alive的(它维护自己所有的状态和成员信息,而且仍然在window manager的管理中),但当系统内存极度贫乏时也会将其killed。
activity由于其他的activity而完全变暗,它就进入了stopped状态。它仍然保持着所有的状态和成员的信息,可是,他对于用户来说不可见,当别的地方需要内存的时候它经常会被killed。
activity是paused或者stopped,系统需要将其清理出内存的时可以命令其finish或者简单kill其进程。当它重新在用户面前显示的时候,它必须完全重新启动并且将其关闭之前的状态全部恢复回来。
下面的图表是Activity的状态图,直角矩形代表了callback方法,你可以实现这些方法从而使Activity在改变状态的时候执行你制定的操作。带颜色的椭圆形是Activity的主要状态。
这里写图片描述
一般来说activity的生命周期变化看起来比较象下面的表格:
这里写图片描述这里写图片描述这里写图片描述

必调用的三个方法:onCreate() –> onStart() –> onResume(),用AAA表示
(1)父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下
AAA –> onFreeze() –> onPause() –> onStop() –> onRestart()–> onStart(),onResume() …

(2)用户点击Home,Actvity调用顺序如下
AAA –> onFreeze() –> onPause() –> onStop() – Maybe –>onDestroy() – Maybe

(3)调用finish(), Activity调用顺序如下
AAA –> onPause() –> onStop() –> onDestroy()

(4)在Activity上显示dialog, Activity调用顺序如下
AAA

(5)在父Activity上显示透明的或非全屏的activity,Activity调用顺序如下
AAA –> onFreeze() –> onPause()

(6)设备进入睡眠状态,Activity调用顺序如下
AAA –> onFreeze() –> onPause()

横竖屏切换时候activity的生命周期:
  1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

  2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

  3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

1 0
原创粉丝点击