Android使用RecentsActivity来展示最近使用过的app。至于此界面,不同品牌的Android智能手机,可能界面都会有所不一样。以Android 5.1的RecentsActivity界面为例,原始风格也跟以往的版本有一些不一样(如图),似乎比以往的界面都要炫酷一些。不过从Android 5.0开始,Recents就有了诸多变化,比如:Android4.4 在SystemUI中并没有Recents文件结构。
要触发Recents界面,从目前的手机使用来看,大致可以分为两种:
1)长按HOME键触发Recents界面;
2)通过点击NavigationBar上的图标(也相当于一个键)来触发Recents界面。
以长按HOME键触发Recents界面为例,来学习和分析Android5.1源码中Recents显示流程,同时也作为记录,方面以后参考。
Recents界面是个Activity,并且属于SystemUI,既然是属于SystemUI,那就是说Recents界面正常情况下都是在手机开机进入系统时就开始初始化。事实上也确实如此,在手机开机进入锁屏或者Launcher界面以后,触发Recents界面并不会执行onCreate()方法,只是执行onStart()方法。可见通常情况下RecentsActivity被隐藏起来了,这点,我刚开始时候也有点颠覆了我对activity的认知,不过经过后面看代码也就释然了,RecentsActivity是一个比较特殊的activity,framework层会对它做特殊处理:RecentsActivity在Manifest文件中是这么声明的:
<activity android:name=".recent.RecentsActivity"
android:label="@string/accessibility_desc_recent_apps"
android:theme="@style/RecentsStyle"
android:excludeFromRecents="true"
android:launchMode="singleInstance"
android:resumeWhilePausing="true"
android:exported="true">
<intent-filter>
<action android:name="com.android.systemui.TOGGLE_RECENTS" />
</intent-filter>
</activity>
真是不同于常用的activity。
excludeFromRecents 属性表示:
Indicates that an Activity should be excluded from the list of recently launched activities。(大致含义:表示此activity不会被列在Recents列表内)