1、典型的生命周期
在这张图中,总共7种状态:
onCreate()与onDestroy()对应,存在状态
onStart()与onStop()对应,可见状态
onResume()与onPause()对应,前台状态,即可以进行点击操作等
而对于onRestart(),其执行具体过程:onStop() -> onRestart() -> onStart()
具体讲解如下:
生命周期的几种普通情况:
①针对一个特定的Activity,第一次启动,回调如下:onCreate()->onStart()->onResume()
②用户打开新的Activiy的时候,上述Activity的回调如下:onPause()->onStop()
③再次回到原Activity时,回调如下:onRestart()->onStart()->onResume()
④按back键回退时,回调如下:onPause()->onStop()->onDestory()
⑤按Home键切换到桌面后又回到该Actitivy,回调如下:onPause()->onStop()->onRestart()->onStart()->onResume()
⑥调用finish()方法后,回调如下:onDestory()(以在onCreate()方法中调用为例,不同方法中回调不同,通常都是在onCreate()方法中调用)。
在横竖屏切换的过程中,会发生Activity被销毁并重建的过程。
在了解该情况的生命周期时,需先了解这两个回调:onSaveInstanceState和onRestoreInstanceState。
在Activity由于异常情况下终止时,系统会调用onSaveInstanceState来保存当前activity的状态。该方法的调用在onStop之前,但与onPause的调用没有既定的前后顺序(注意:只在Activity被异常终止时调用)。
当异常终止的Activity被重建时,系统会调用onRestoreInstanceState,并把Activity销毁时onSaveInstanceState方法所保存的Bundle对象参数同时传递给onRestoreInstanceState和onCreate。
因此,可以通过onRestoreInstanceState方法来恢复Activity状态,该方法的调用在onStart之后。
onRestoreInstanceState和onCreate区别:onRestoreInstanceState回调则表明其Bundle对象不为空,无需判断。而onCreate需加判断,因而建议使用onRestoreInstanceState
横竖屏切换的生命周期:
onPause() -> onSaveInstanceState() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> onRestoreInstanceState() -> onResume()
通过AndroidManifest文件的Activity中指定如下属性:
android:configChanges="orientation|screenSize"复制代码
来避免横竖屏切换时,Activity的销毁和重建,而是回调如下方法:
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
(1)前台Activity:正在和用户交互的Activity,优先级最高
(2)可见但非前台Activity:如Activity中弹出了一个对话框,导致Activity可见但位与后台无法和用户交互
(3)后台Activity:已经被暂停的Activity,比如执行了onStop,优先级最低
内存不足时,会按照上述优先级从低到高取杀死目标Activity所在的进程。
四种:
Activity的管理是采用任务栈的形式,任务栈采用“后进先出”的栈结构
假如目前有两个任务栈。前台任务栈为AB,后台任务栈为CD,这里假设CD的启动模式均为singleTask,现在请求启动D,那么这个后台的任务栈都会被切换到前台,这个时候整个后退列表就变成了ABCD。当用户按back返回时,列表中的activity会一一出栈,如下图。
如果不是请求启动D而是启动C,那么情况又不一样,如下图。
调用SingleTask模式的后台任务栈中的Activity,会把整个栈的Actvity压入当前栈的栈顶。singleTask会具有clearTop特性,把之上的栈内Activity清除。
android:excludeFromRecents="true"
。今年年初我花一个月的时间收录整理了一套知识体系,如果有想法深入的系统化的去学习的,可以私信我【安卓】,我会把我收录整理的资料都送给大家,帮助大家更快的进阶。