目录
初始化流程
点击Recent键流程
RecentsActivity 显示流程
RecentsModel 获取数据管理类
RecentsActivity 布局
已处于Recent界面时
点击recent 空白区域
点击返回键
recent组件配置
Android10 Recent 功能由 System UI,Launcher共同实现。
初始化流程
Android10.0 最近任务Recents功能分析_android 最近任务-CSDN博客
TouchInteractionService.onOverviewToggle
OverviewCommandHelper.onOverviewToggle
RecentsActivityCommand
registerAndStartActivity
OverviewComponentObserver.getOverviewIntent
mListener.registerAndStartActivity(mOverviewComponentObserver.getOverviewIntent(), 最终启动逻辑。
(引用别人的图)
点击Recent键流程
Recents(SystemUI 中).toggleRecentApps
TouchInteractionService(Launcher) . onOverviewToggle
OverviewCommandHelper .onOverviewToggle
RecentsActivityCommand
registerAndStartActivity
去启动配置的RecentsActivity
RecentsActivity 显示流程
RecentsActivity. setupViews
RecentsView.onAttachedToWindow.
updateTaskStackListenerState
reloadIfNeeded
applyLoadPlan
在applyLoadPlan()内部,主要执行了四项工作:
unloadVisibleTaskData():将现有visible的task数据进行置空;
根据task数量(首次进入)进行addView,TaskView通过mTaskViewPool的getView()进行获取,最后添加clearAllButton;
对添加完的TaskView进行bind()操作,将对应的task存在TaskView内部,类似setTag()功能;
执行resetTaskVisuals()来刷新加载数据;
loadVisibleTaskData
TaskView.onTaskListVisibilityChanged
SnapshotView.setThumbnail 加载缩略图
setIcon 加载 icon
RecentsModel 获取数据管理类
RecentsModel继承了TaskStackChangeListener,在构造方法内部初始化了RecentsTaskList、TaskIconCache和TaskThumbnailCache实例,注册了registerTaskStackListener回调;分别来获取最近任务列表、获取Task对应的Icon和,
- RecentsTaskList:获取最近任务列表;
- TaskIconCache:获取Task对应的icon,并进行缓存;
- TaskThumbnailCache:获取Task对应的thumbnailData,并进行缓存;
与Android8.1不同的是,8.1上在获取最近任务列表后会获取任务对应的Thumbnail和Icon,最终封装成Task,在显示时直接通过Task.thumbnail和Task.icon就可以直接显示;11上会通过TaskIconCache和TaskThumbnailCache进行分别存储管理,首次显示或有新的任务,需要通过TaskIconCache和TaskThumbnailCache执行对应的request去获取并进行cache存储;
onTaskStackChangedBackground (数据更新)
TaskList.getTaskKeys
loadTasksInBackground
ActivityManagerWrapper.getInstance().getRecentTasks
ActivityTaskManager.getRecentTasks
RecentsActivity 布局
R.layout.fallback_recents_activity
RecentsRootView
RecentsView 最近应用核心view
==========
已处于Recent界面时
若已进入recent界面:
点击recent 空白区域
(RecentsActivity 做最近Activity时)
RecentsView.onTouchEvent
FallbackRecentsView.startHome (Android13)
BaseRecentsActivity.startHome
点击返回键
BaseRecentsActivity.onBackPressed --- startHome
recent组件配置
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
中通过 context.getString(com.android.internal.R.string.config_recentsComponentName)
判断加载啥RecentActivity.
配置的是:com.android.launcher3/com.android.quickstep.RecentsActivity
PS:
packages/apps/Launcher3/quickstep/recents_ui_overrides 优先