APP二次启动问题

来源:互联网 发布:孝子之至 莫大乎尊亲 编辑:程序博客网 时间:2024/06/03 16:00

  这两天突然在考虑一个问题,就是APP在按了HOME键之后再点击应用图标(进程没被杀死的情况下)是如何恢复到刚才打开的界面的。按理来说在lanucher点击应用图标是start有android.intent.action.main这个属性activity,那么为什么能够回到原来打开的界面呢?个人初步猜测是启动模式还有affinity有关。带着问题去看了下网上关于启动流程的分析以及android的源码。
  
这里写图片描述

  从lanucher里启动的activity默认带有FLAG_ACTIVITY_NEW_TASK属性,所以走进这个if条件,在启动页不是singleinstance的情况下会走到findTaskLockded这个方法里面。
  
这里写图片描述

  在这个方法里,遍历当前存在的所有task

这里写图片描述

  接下来就是进入这个判断,判断当前栈顶的task和要启动的activity所在的task是否是同一个,由于是从lanucher启动的,当前栈顶的task应该是lanucher所以在的task,所以肯定不是同一个task,所以满足这个条件,然后调用moveTaskToFontLocked,这个就是把要启动的activity所在的task移动到栈顶。然后顺这个看下去,就会看到resumeTopActivitiesLocked这个方法的调用,就是恢复当前task的顶部activity,所以我们看到就是原来点击home键所在的这个界面。
  补充一点,就是这个回到原来所在页面的前提是,启动页就是有android.intent.action.main这个属性的页面不能是singletask或者singleintance, singleintance就不用细说了,因为这个属性的activity所在的task里只能存在他本身一个activity实例,恢复到它所在的task看到也只有它一个界面。如果是singletask的话,
  
  这里写图片描述

则会命中这个条件,会执行清除task的操作,所以同样恢复不了原来的界面。

0 0
原创粉丝点击