导读
- 移动开发知识体系总章(Java基础、Android、Flutter)
- Activity的四种启动模式
- onNewIntent()方法何时会被调用
- Activity的四个状态
Activity的四种启动模式
standard,singleTop,singleTask,singleInstance
- standard:默认模式,每次激活的Activity都会创建实例放到任务栈中
- singleTop:如果任务栈顶正好存在该Activity的实例,就重用该实例,反之只要不在栈顶,无论是否有该实例额,都会创建新的实例。
- singleTask:如果任务栈中有该Activity的实例,那么会把该实例之上的实例都移除出栈,让该实例作为栈顶。如果没有该Activity实例则创建并放到栈顶
- singleInstance:这是一个特殊的模式,会在一个新的栈创建Activity实例,并让多个应用共享该栈中的Activity实例,只要有一个应用激活了该Activity的实例,其他用到该Activity实例的都不需要再进行激活(创建)
四种启动模式在什么时候使用?
- standard:默认模式,大部分使用的是该模式。
- singleTop:
- 适合接收通知启动的内容显示页面。
- 适合自己跳自己的页面。
- 适合多入口启动的页面。
- singleTask:适合程序主Activity(或者是主模块Activity)(ps:可能有面试被问到过开100个activity如何快速关闭,除了在主Activity使用singleTask模式外,大部分使用的是Activity管理吧,后期补充这一块。)
- singleInstance: 适合独立任务、多APP使用的页面、以及系统级功能(闹钟、打电话等)
onNewIntent()方法何时会被调用
当Activity的launchMode为singleTask的时候,通过Intent启动一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法。这时的Activity执行的生命周期为:onNewIntent()——>onRestart()——>onStart()——>onResume();
当然也不要忘记,系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法.
Activity的四个状态
- running : 用户可见状态,即当前Activity实例在栈顶。
- paused : 仍然是用户可见状态,但是界面失去焦点无法与用户交互。
- stopped :用户不可见状态,无法交互。
- destroyed/killed :当前Activity实例被销毁,等待系统回收。
Starting ——–>Running 所执行的生命周期顺序 onCreate()->onstart()->onResume()
当前称为活动状态(Running),此activity所处于任务栈的top中,可以与用户进行交互。
Running ——>Paused 所执行Activity生命周期中的onPause()
当前称为暂停状态(Paused),该Activity已失去了焦点但仍然是可见的状态(包括部分可见)。
Paused ——>Running所执行的生命周期为:OnResume()
当前重新回到活动状态(Running),此情况用户操作home键,然后重新回到当前activity界面发生。
Paused ——>Stoped所执行的生命周期为:onStop()
该Activity被另一个Activity完全覆盖的状态,该Activity变得不可见,所以系统经常会由于内存不足而将该Activity强行结束。
Stoped——>killed所执行的生命周期为:onDestroy()
该Activity被系统销毁。当一个Activity处于暂停状态或停止状态时就随处可能进入死亡状态,因为系统可能因内存不足而强行结束该Activity。