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