Activity生命期笔记
onCreate()-->onNewIntent()-->onRestart()--->onStart()--->onRestoreInstanceState()--->onResume() -->onPause()-->onSaveInstanceState()--->onStop()--->onDestroy()
Activity生命期解释
1. onCreate() 创建页面
2. onNewIntent() 重用栈中已存在的实例
3. onRestart() 重启页面
4. onStart() 开始页面
5. onRestoreInstanceState() 恢复实例状态
6. onResume() 可以获取焦点
7. onPause() 失去焦点
8. onSaveInstanceState() 保存实例状态
9. onStop() 停止页面
10. onDestroy() 销毁页面
场景
普通场景
onCreate()-->onStart()--->onResume()
从上级视图跳转到下级视图
上级视图 onPause()-->下级视图 onCreate()-->onStart()--->onResume()-->上级视图 onSaveInstanceState()-->onStop()
下级视图回到上级视图
上级视图 onPause()-->下级视图 onRestart()-->onStart()--->onResume()-->下级视图 onStop()-->onDestroy()
主页面按返回键
onPause()-->onStop()--->onDestroy()
特殊场景
长按主页键弹出进程列表
onPause()-->onSaveInstanceState()-->onStop()
进程列表中返回视图A
onRestart()-->onStart()--->onResume()
竖屏转横屏
竖屏页面onPause()-->onSaveInstanceState()--->onStop()--->onDestroy()
--->横屏页面onCreate()-->onStart()--->onRestoreInstanceState()--->onResume()
启动模式
标准模式
launchMode="standard" 都是重新创建该页面的实例 并放入栈尾
模式2:singleTop
launchMode=”singleTop 判断如果栈顶正好就是该Activity的实例,则重用该实例 则创建新的实例并放入栈顶
模式3:singleTask
launchMode="singleTask" 判断如果栈中存在该Activity的实例,则重用该实例,并清除位于该实例上面的所有实例;否则的情况处理同standard
onNewIntent()-->onRestart()--->onStart()--->onRestoreInstanceState()--->onResume()
模式4:singleInstance
launchMode="singleInstance" 将该Activity的实例放入一个新栈中,原栈的实例列表保持不变。
onNewIntent()-->onRestart()--->onStart()--->onRestoreInstanceState()--->onResume()-->onSaveInstanceState()-->onStop()
视图
Intent 设置启动标志 setFlags
FLAG_ACTIVITY_NEW_TASK
开启一个新任务,flags默认该值 同于launchMode="standard"
FLAG_ACTIVITY_SINGLE_TOP
同于launchMode="singleTop"
FLAG_ACTIVITY_CLEAR_TOP
与launchMode="singleTask"类似
launchMode="singleTask"采用onNewIntent启用原任务,而FLAG_ACTIVITY_CLEAR_TOP采用先onDestroy再onCreate创建新任务
当栈中存在待跳转的activity实例时,则重新创建一个新实例,并将原实例上方的所有实
FLAG_ACTIVITY_NO_HISTORY
与launchMode="standard"类似 栈中不保存新启动的activity实例
FLAG_ACTIVITY_CLEAR_TASK
该标志非常暴力,跳转到新页面时,栈中的原有实例都被清空。该标志需要结合FLAG_ACTIVITY_NEW_TASK使用
Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK”