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可以供其他应用调用
网友评论