前言:启动模式对我而言就如之前的写的文章事件传递是一样的感受,能说出来,问你个问题,就懵圈的那种,本文将从以下三个方面来介绍启动模式,权当是对该知识点的巩固与加深
1.四种模式的介绍及其应用场景
2.对singleInstance加强理解
1.四种模式的介绍及其应用场景
1.standard:标准启动模式,也是activity的默认启动模式。在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity的实例
2.singleTop:栈顶复用
1>栈顶存在,复用
2>栈顶不存在,就如standard一样
应用场景:
点击通知栏打开栈顶的Activity,如果standard模式,可能会出现创建多个的情况
3.singleTask:栈内复用
1>栈中存在,清除栈中在其以上的实例
2>栈中不存在,就如standard一样
场景:以作业帮为例
1>我的课程/其他位置-->课程详情页-->章节详情页-->课程-->章节-->.....课程详情页面
点击back-->我的课程/其他位置
2>我的课程/其他位置-->课程详情页-->章节详情页-->课程-->章节-->.....章节页面
点击back-->课程详情-->我的课程/其他位置
4.singleInstance:加强版的singleTask,存在于单独的任务栈
2.对singleInstance加强理解
问题1:(activity不标注默认为standard) A-->B(singleInstance)-->C,点击back,回到哪个界面?
解答:之前凭第六感觉得是:B-->A(~~~~(>_<)~~~~),亲自实践后: A-->B
C与A是在一个任务栈中的,B单独一个任务栈,C与A依次出栈后,B暴露在前台,back后出栈,回到桌面
问题2:A-->B(singleInstance),然后点击home按键,再点击app,展示的是哪个页面(A/B)?
解答:同样凭第六感觉:B,点击back是A,亲自实践后:A,点击back,回到launcher
从桌面点击app,会进入与MainActivity的栈中,此时栈中只有A,此时点击back,
launcher(singleInstance)-->A-->B(singleInstance)
launcher(singleInstance)-->A
A出栈,就回到launcher了
备注:之前一直想不明白点击back,为什么不显示B,把launcher启动方式看成singleInstance,就理解了,百度网上说的什么最近栈/其他的解释,反正我是没懂)
问题3:A(singleInstance)-->B然后点击menu按键,回到哪个界面,再点击back界面又回到那个界面??
解答:不猜了,反正都猜不对,答案:B
launcher(singleInstance)-->A(singleInstance)-->B
launcher(singleInstance)-->B
B,点击back回到Launcher
A与B属于不同的栈结构,task1中只有A,点击back,A出栈,就回到了launcher
参考链接:
Android中Activity四种启动模式和taskAffinity属性详解 - 张纪刚的博客 - CSDN博客