SystemUI RecentsActivity 分析

SystemUI RecentsActivity 分析

功能描述

Android在finish结束应用后,之前占用内存不会立即被释放出来。在内存不足的时候,我们可以recent按钮清理后台的应用。点击recent按钮,界面上会显示所有有界面后台的task的栈顶缩微图(Launch不会显示)

预先了解

ActivityStack,ActivityRecord,TaskRecord关系
  1. ActivityStack则是用来管理TaskRecord的,包含了多个TaskRecord。
  2. 一个TaskRecord由一个或者多个ActivityRecord组成,这就是我们常说的任务栈,具有后进先出的特点
  3. ActivityRecord对应一个Activity实例

下面是包含关系

->:包含
在这里插入图片描述

  • 问题1:什么情况才会有多个TaskRecord
    当跳转的下一个界面的启动模式是 android:launchMode=“singleInstance”,应用会产生新的TaskRecord
    可以通过 adb shell dumpsys activity 抓取后台task

当我们设置MainActivity为singleInstance时:

      TaskRecord{1175cb4 #59 A=com.can.keycodeddetected U=0 StackId=1 sz=1}
        Run #1: ActivityRecord{f3ddef9 u0 com.can.keycodeddetected/.MainActivity t59}
      TaskRecord{c6b59bc #58 A=com.can.keycodeddetected U=0 StackId=1 sz=1}
        Run #0: ActivityRecord{3c56e71 u0 com.can.keycodeddetected/.autofilltest.AutoFillActivity t58}

当我们设置MainActivity为standard时:

      TaskRecord{d0f6fec #60 A=com.can.keycodeddetected U=0 StackId=1 sz=2}
        Run #1: ActivityRecord{1ca3948 u0 com.can.keycodeddetected/.MainActivity t60}
        Run #0: ActivityRecord{b07d861 u0 com.can.keycodeddetected/.autofilltest.AutoFillActivity t60}
    mResumedActivity: ActivityRecord{1ca3948 u0 com.can.keycodeddetected/.MainActivity t60}

从上面可以看出singleInstance模式下,会有两个TaskRecord,分别是#58,#59,在standard就只有一个#60。

  • 问题2:(一个应用内)点击recent按钮显示的是哪个TaskRecord,如果清除后台,是清除的TaskRecord还是ActivityStack
    通过应用,我们可以发现recent按钮,只会显示最后这个应用的界面(runningtask),当我们清除这个应用后台,整个应用都清除了,所以:点击recent按钮显示的是最后运行的TaskRecord,清除后台,是清除的ActivityStack,因为只有一个taskrecord显示在历史记录,如果是清除的TaskRecord,那么必须显示所有的TaskRecord,这样显然不合理,对于用户
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值