Activity生命周期

 

方法描述Killable?Next
onCreate()在Activity开始时调用。这是大多数初始化应该做的:调用setContentView(int)来填充Activity的UI,使用findViewById以编程方式与UI中的小部件交互,调用managedQuery(Uri、String[]、String、String[]、String)来检索显示数据的游标,等等。
您可以在这个函数中调用finish,在这种情况下,onDestroy()将在onCreate之后立即调用,而不执行活动生命周期的任何其他部分(onStart、onResume、onPause等)。
NoonStart()
onRestart()当当前Activity被重新显示给用户(用户已导航回该Activity)时,在onStop之后调用。然后是onStart和onResume。
对于使用原始游标对象的Activity(而不是通过managedQuery(Uri、String[]、String、String[]、String)创建它们),通常应该在这里重新查询游标(因为您在onStop中禁用了它)
NoonStart()
onStart()在onCreate之后调用,或者在onRestart之后调用,此时Activity已经停止,但是现在再次显示给用户。接下来是onResume。用户可见NoonResume()or onStop()
onResume()在onRestoreInstanceState、onRestart或onPause之后调用,以便您的活动开始与用户交互。这是一个开始动画打开独占访问设备(如相机)等的好地方。
请记住,onResume并不是显示您的活动对用户可见的最佳指示器;系统窗口,如键盘保护,可能在前面。使用onWindowFocusChanged来确定您的活动对用户是可见的(例如,恢复游戏)。用户可交互
NoonPause()
onPause()作为活动生命周期的一部分调用,当一个活动进入后台,但尚未被杀死时调用。onResume的对应版本。
当活动B在活动A之前启动时,将在A上调用这个回调。B直到A的onPause返回时才会创建,所以这里不要做任何耗时的操作
这个回调主要用于保存活动正在编辑的任何持久状态,向用户显示一个“editin place”模型,并确保如果没有足够的资源启动新活动而不首先杀死这个活动,则不会丢失任何东西。这也是一个很好的地方,可以执行停止动画和其他消耗大量CPU的操作,以便尽可能快地切换到下一个活动,或者关闭独占访问的资源,比如摄像头。
在系统需要更多内存的情况下,它可能会终止暂停的进程来回收资源。因此,您应该确保在从该函数返回时保存了所有状态。通常onSaveInstanceState用于在活动中保存每个实例的状态,该方法用于存储全局持久数据(在内容提供程序、文件等中)。
在接收到这个调用之后,您通常会接收到一个对onStop的后续调用(在下一个活动已经恢复并显示之后),但是在某些情况下,会有一个对onResume的直接调用,而不需要经过停止状态。用户不可交互
Pre-Build.VERSION_CODES.HONEYCOMBonResume()or
onStop()
onStop()

当用户不再可见时调用。接下来,您将收到onRestart、onDestroy或什么都不做,这取决于稍后的用户活动。

可以做一些稍微耗时的操作。用户不可见

YesonRestart()or
onDestroy()
onDestroy()在销毁Activity之前执行最后的清理。这可能是因为活动即将结束(有人在其上调用finish),也可能是因为系统临时销毁了活动的这个实例以节省空间。您可以使用isfinish方法来区分这两个场景。
注意:
不要指望调用此方法来保存数据!例如,如果一个活动正在内容提供程序中编辑数据,那么这些编辑应该在onPause或onSaveInstanceState中提交,而不是在这里。此方法通常用于释放与活动关联的线程之类的资源,以便被销毁的Activity不会在其应用程序的其余部分仍在运行时留下这些资源。在某些情况下,系统只会在不调用该方法(或任何其他方法)的情况下终止Activity的宿主进程,因此不应该使用该方法来做一些在进程消失后仍然存在的事情。
 nothing

启动Activity的请求会由Instrumentation来处理,然后它通过Binder向AMS发请求,AMS内部维

护着一个ActivityStack并负责栈内的Activity的状态同步,AMS通过ActivityThread去同步

Activity的状态从而完成生命周期方法的调用。

Activity异常情况下的数据保存:

onRestoreInstanceState或者onCreate,二者的区别是:onRestoreInstanceState一旦被调用,其参数Bundle savedInstanceState一定是有值的,我们不用额外地判断是否为空;但是onCreate不行,onCreate如果是正常启动的话,其参数Bundle savedInstanceState为null,所以必须要额外判断

Activity的优先级:

1)前台Activity:正在和用户交互的activity。

2)用户可见但不可交互的Activity。

3)后台Activity。

当系统内存不足时,系统就会按照上述优先级去杀死目标Activity所在的进程,并在后续通过onSaveInstanceState和onRestoreInstanceState来存储和恢复数数据

State diagram for an Android Activity Lifecycle.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值