activity生命周期简析

最近在搞Android最基础的组件--Activity。这个其实说简单也不简单,还是花了点时间去弄,主要是弄清楚它的各个状态和生命周期的关系,下面一起来探讨下activity的生命周期。

一、Activity:是用来和用户交互的窗体,包括用户输入和显示处理结果。一个应用程序通常由多个activities组成,他们通常是松耦合关系。它们的状态有:运行状态、暂停状态、停止状态、销毁状态。

这里应该是有一张关于activity生命周期的图的,但是我懒得传了,网上一搜一大把,只要动动手指就好了。。。


7个生命周期如下:

onCreate(Bundle savedInstanceState)

onStart()

onRestart()

onResume()

onPause()

onStop()

onDestroy()

我这里建了一个工程,代码会在后面上传;

生命周期的详解:

1、单个Activity窗体时:

初次启动Activity:会调用onCreate()-->onStart() --> onResume(),然后分别进行以下操作。

   情况1:按下Back键:此时回到系统桌面,系统调用onPause()-->onStop() --> onDestroy()。因为用户选择终止程序,所以要进行退出销毁动作。

   然后,在桌面点程序图标,则重新启动Activity,调用onCreate()-->onStart() --> onResume()

    图片:

   

注:onPause()方法是在Activity可见但不可交互的时候调用,我们若要保存页面的数据,应在此周期中进行操作。onDestroy()方法是进行页面资源的释放,以释放内存空间。

 

   情况2:按下锁屏键,系统调用onPause()-->onStop()activity不可见,系统暂停当前Activity的运行。

接着解锁屏幕:调用onRestart()-->onStart()-->onResume()activityc重新进入运行状态。

 

   情况3:按下Home键:系统回到桌面,系统调用onPause() --> onStop()。因为用户并没有退出程序,但是Activity处于不可见状态,所以会调用onstop(),但是不会调用onDestroy()

然后在桌面点击程序图标,调用onCreate()-->onStart() --> onResume(),恢复不可见的Activity到前台。

 

   情况4:长按Home键,调用onPause(),此时activity仍处于可见但不可交互的暂停状态,但是不会调用onStop()方法。

接着操作分为:

  (1)按Back键返回,则调用onResume()。窗体处于可见的暂停状态,直接恢复即可。

  (2)按Home键退回桌面,则调用onStop()。窗体处于不可见状态。然后再点击程序图标,则调用onRestart()-->onStart()-->onResume(),进行窗体恢复。

 

   情况5:按音量键,不触发任何Activity周期。


2、多个Activity下进行切换:

这里将第一个Activity称为A,第二个Activity称为B,第三个Activity称为C...依次类推。

 

   情况1Activity A跳转到Activity B

BActivity分为完全遮蔽A和不完全遮蔽A两种:

  (1B完全遮蔽A:系统调用为:AonPause()-->BonCreate()-->BonStart()-->BonResume()-->AonStop()

然后,在B中分别进行以下操作:

    1)按Back键:返回到A,系统调用:BonPause()-->AonRestart()

-->AonStart()-->AonResume()-->BonStop()-->BonDestroy()。在B中,系统会回收B,释放B中资源,或者可以手动设置回收。

    2)按Home键:回到系统桌面,调用为:BonPause() -> BonStop()。然后在桌面点击程序图标,调用BonCreate()-->BonStart() -->B: onResume(),恢复B到前台进行交互。

    3)按锁屏键:调用:BonPause()-->BonStop()。接着解锁屏幕:调用BonRestart()-->BonStart()-->BonResume()Activity重新进入运行状态。

    4)长按Home键:弹出后台运行的程序的窗体,没有完全遮蔽B,则会调用:BonPause();然后操作分两种:1、若按Back键,则调用:BonResume()恢复B2、若按Home键,则调用:BonStop();然后桌面点击程序图标,执行:BonRestart()-->BonStart()-->BonResume()

    5)若有其他优先级高的程序启动,则会调用:BonPause()-->BonStop()

    6)注:若OS内存吃紧,在后台的A可能会被系统kill掉,以释放内存给其它程序使用。

 

  (2)B不完全遮蔽AonPause()--> BonCreate()--> BonStart()--> BonResume(),然后分别执行操作:

    1)按Back键,BonPause() --> AonResume() --> BonStop() --> BonDestroy()

    2)锁屏:BonPause()  --> BonStop() --> AonStop();接着解锁:BonRestart() --> BonStart() --> AonRestart() --> AonStart() --> BonResume()

    3Home键:BonPause() --> AonStop() --> BonStop()。再点击图标,则将两个页面都恢复过来。

    4)点击音量键,不调用任何周期。弹出框等,只有是Activity才会调用Activity的周期。



你可能感兴趣的:(android,Activity,生命周期,窗体基础)