Activity:生命周期、启动模式
Activity生命周期
onCreate->onStart->onResume->Activity运行->新的Activity运行->onPause->onStop->onDestroy->Activity销毁
onCreate() Activity被创建
onStart() Activity可见
onResume() Activity获取焦点
onPause() Activity失去焦点
onStop() Activity 不可见
onDestroy Activity 被销毁
Activity启动模式
四种启动模式,standard, singleTask, singleTop, singleInstance。
standard:标准模式,在当前的任务栈上创建新的Activity,不论之前有没有创建过该Activity。注意:ApplicationContext无法启动standard模式的Activity。
singleTop:栈顶复用模式,如果该Activity在任务栈栈顶,即当前活动的Acitivty就是要创建的Activity,那么不会创建新的Activity。注意:该模式下复用Activity,系统会调用Activity的onNewIntent方法。如果该Activity不在任务栈栈顶,则创建新的Activity。
一个常见的使用场景例如文章新闻推送消息点击跳转。
singleTask:栈内复用模式,分两种情况,第一种情况:如果有任务栈里已经创建了该Acitiviy,直接销毁该Acitivity栈上面的所有Acitivity,无须新创建一个Activity;第二种情况:如果没有任务栈里已经创建该Activity,创建一个新的任务栈并在新栈上创建新Activity。注意:该模式下复用Activity,系统会调用Activity的onNewIntent方法。
适用于会被其他程序调起但是不想显示之前界面的Activity,例如浏览器,不管被多少个应用访问网站功能调用,都显示的是主界面
举例1
BActivity android:launchMode="singleTask"
AActivity CActivity DActivity android:launchMode="standard"
AActivity -> BActivity -> CActivity -> DActivity -> AActivity -> BActivity则BActivity调用onNewIntent方法, CActivity, DActivity, 第二个AActivity调用onDestroy方法
singleInstance:单实例模式,加强版的singleTask,当每次都直接创建一个新的任务栈,再在该新栈上创建新Activity。注意:singleInstance永远是单栈单Activity,永远使用一个全新的Task栈来加载该Activity实例。
使用场景:APP经常调用的拨打电话、系统通讯录、系统Launcher、锁屏键、来电显示等系统应用。singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。