Activity四种启动模式

2019-02-19  本文已影响0人  苏墨白梦觉泪满青衫湿

standard(标准默认的模式)

standard模式是默认的启动模式,每次startActivity都是创建一个新的activity的实例, 适用于绝大大数情况。

1.在不指定启动模式的前提下,系统默认使用该模式启动Activity
2.每次启动一个Activity都会重复创建一个新的实例
3.Activity它的onCreat(),onStart(),onResume方法每次被启动时都会被调用

使用问题:
重复快速启动相同的Activity它会重复创建相同的实例,知道back返回时才会从任务栈中移除一个实例。

解决方案:
1.做防止快速点击操作来避免重复创建
2.singletop 这个可以用来避免多次创建

singleTop(栈顶的)

单一顶部,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例, 而是调用 onNewIntent() 方法。

1.当前栈中已有该Activity的实例并且该实例位于栈顶时
2.当前栈中已有该Activity的实例但是该实例不在栈顶时
3.当前栈中不存在该Activity的实例时

应用场景
IM对话框
新闻客户端推送

standard和singleTop都是原来的任务栈中新建一个Activity实例,不会开启一个新的任务栈

singleTask(栈的复用)

1.首先会根据taskAffinity去寻找当前是否存在一个对应名字的任务栈
2.如果不存在,则会创建一个新的Task
3.如果存在,则得到该任务栈,查找该任务栈中是否存在该Activity实例

应用场景:
应用的主界面,整个任务栈只有一个实例,节约内存和cpu的目的。

singleInstance()

单一实例,整个手机操作系统里面只有一个实例存在。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。与singleTask不同的是singleInstance会新建一个任务栈,这个任务栈只有这么一个实例,而singleTask不会创建新的任务栈。

1.以SingleInstance模式启动的Activity具有全局唯一性
2.如果在启动这样的Activity时,已经存在了一个实例,会把存在的实例调度到前台进行复用
3.以singleInstance模式启动的Activity具有独占性
应用场景:
呼叫来电
非常确定app中只有一个Activity可以供其他应用调用

上一篇下一篇

猜你喜欢

热点阅读