您的位置:首页 > 移动开发 > Android开发

Android:正常情况下的Activity的生命周期

2016-06-18 17:00 363 查看
前言:

  Activity的生命周期分为两部分:

  - 正常情况下的生命周期;       

  - 异常情况下的生命周期:Activity被系统回收或者由于设备的配置发生改变从而导致Activity被销毁重建;

  



这里有三个生命周期比较关键:

完整生命周期:从最初调用onCreate(Bundle)到最终调用onDestroy();Activity会在onCreate()进行所有“全局”状态的设置,在onDestroy()中释放所有持有的资源。比如,调用setContentView去加载界面布局资源,初始化Activity所需的数据等。

可见生命周期:从activity调用onStart()开始,到调用对应的onStop()为止;在这段时间内用户可以在屏幕上看到这个activity,尽管并不一定是在前台也不一定可以和用户交互。在这两个方法之间你可以维护那些activity在用户显示时所需的资源。随着用户的操作或设备屏幕的点亮或熄灭,这两个方法可能会被调用多次。举个例子来说,你可以在onStart()中注册一个IntentReceiver来监控那些可以对你的UI产生影响的环境改变,当你的UI不继续在用户面前显示时你可以在onStop()中注销这个IntentReceiver。每当activity在用户面前显示或者隐藏时都会调用相应的方法,所以onStart()和onStop()方法在整个生命周期中可以多次被调用。

可操作生命周期:从activity调用onResume()开始,到调用对应的onPause()为止;这段时间activity处于其他所有activity的前面,且与用户交互。一个activity可以经常在resumed和paused状态之间转换——例如手机进入休眠时(设备屏幕的点亮和熄灭)、activity的结果返回时、新的intent到来时——所以这两个方法中的代码应该非常的简短。

onRestart():表示Activity正在被重新启动,一般情况下,当前Activity从不可见变为可见,onRestart()就会被调用。这一般是用户操作导致的,比如,用户按Home键切换到桌面或打开另外一个Activity,这是当前Activity就会执行onPause()和onStop(),接着用执行onRestart()方法回到当前Activity()。

onPause():正常情况下,onStop()就会被调用,在特殊情况下,如果这个时候快速地返回当前Activity,那么onResume()就会被调用。当然这种情况很难出现。onPause()必需先执行完,新的Activity才会执行onResume()。所以可以在onPause()储存数据,停止动画等操作但不能太耗时。

onStop():可以做一些稍微重量级的回收工作,但不能太耗时。

onFreeze():当你的activity被暂停而在其他activity显示之前,你可以使用这个方法保存你当前的用户状态(一般来说是当前实例的用户状态)。暂停之后,为了回收资源供给前景activity,系统会在需要的时间停止(或者kill)你的应用。以后如果你的activity启动一个新的实例重新与用户进行交互,你保存在这里的状态都将通过onCreate()方法传递给新的实例。其后总是调用onPause()方法。

注意:

当用户打开新的Activity或者切换到桌面时,调用顺序如下:onPause()->onStop()。如果新的Activity采用透明主题,那么当前Activity不会调用onStop();

当Activity()被系统回收后再次打开,生命周期方法调用顺序和第一次打开Activity时一样,但不代表所有过程都一样,只是方法调用顺序相同而已;

栈顶的Activity需要先执行onPause(),新的Activity才会启动;(准确),调用顺序为:旧的onPause()->新的onCreate()->新的onStart()->新的onResume()->旧的onStop();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: