欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    recentApps 处理流程Word文档格式.docx

    • 资源ID:15719008       资源大小:115.76KB        全文页数:10页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    recentApps 处理流程Word文档格式.docx

    1、近期任务显示 9RecentAPP删除流程 10总结 12RecentAPP显示流程近期任务中很重要的一部分是StatusBarManagerService, Recentapp的显示主要是通过其调起。那我们就先分析下StatusBarManagerService,在系统初始化的时候我们获取了StatusBarManagerService,然后把它加入到了ServiceManager中,其中以Context.STATUS_BAR_SERVIER为标志,为方便了后面的获取。SystemServer.java -main() - run()接着就是对StatusBarManagerService的

    2、分析了,StatusBarManagerService extends IStatusBarService.Stub 就是一个IBinder对象,它通过ServiceManager.addService()的方式启动。LocalServices是进程内调用的服务,那么StatusBarManagerInternal也就是在system_process进程中使用。当用户长按HOME键的时候,PhoneWindowManager的interceptKeyBeforeDispatching()函数会对HOME按键进行处理,执行调起recentAPP应用。从下面的截图我们可以看到,phonewindo

    3、wManager是通过StatusBarManagerInternal来最终调用到StatusBarManagerService的toggleRecentApps函数,接着进而调用到IStatusBar子类CommandQueue的接口实现类 BaseStatusBar中。然后最终调起RecentsTvActivity显示出近期任务。下面是recentAPP调起过程中所涉及的类图(图一)图一从interceptKeyBeforeDispatching开始到近期任务显示出来,分两部分工作。一是task的获取,二是task的显示。Task的获取主要是preloadRecentApps()来完成;t

    4、ask获取后近期任务的显示是由toggleRecentApps()来完成。下面我们将分别讲讲这两个流程:task的获取从下面的Task获取流程(图二)中可以看到,在ams中,有一个mRecentTasks对象,该对象保存了近期启动的task任务信息,RecentsActivity实际上是要获取mRecentTasks对象,而RecentTask的信息获取是在TaskPersister.java中实现, 主要是去解析xml文件,此XML文件位于/data/system_ce/0/recent_tasks目录下。最后调用createRecentTaskInfoFromTaskRecord()方法把

    5、TaskRecord信息转换成RecentTaskInfo的信息,自此就获取了所需的RecentTaskInfo信息Task获取流程(图二) 图二RecentTasks赋值还有一个疑问,mRecentTasks真正是在哪里赋值的呢?有两个地方,一是在startActivity的过程中,二是在activity 重新resume时。其中共涉及到四个类,见图三: 图三1) 先看startActivity时,在minimalResumeActivityLocked方法中将TaskRecord对象加入到mRecentTasks对象中然后,ActivityStack中的mRecentTasks是怎么和Ac

    6、tivityManagerService的mRecentTasks联系起来的呢?在ams初始化时创建了ActivityStackSupervisor对象,用来辅助ams管理ActivityStack,同时也创建了mRecentTasks对象,参数是ams和mStackSupervisor。而RecentTasks的构造函数中又把自己通过setRecentTasks的方法保存到了ActivityStackSupervisorActivityStackSupervisor中也保存了一个RecentTasks对象,这样实际上和ActivityManagerService的mRecentTasks指向

    7、了同一个地址。在ActivityStackSupervisor中创建ActivityStack时,又把mRecentTasks传递到了ActivityStack中,这样ActivityStack中的mRecentTasks就和ActivityManagerService的mRecentTasks保持一致了。2)现在回到mRecentTasks的赋值问题,第二个时机是在activity 重新resume时,最终走到ActivityStack的resumeTopActivityInnerLocked函数中,其他与startActivity相似,就不再重新叙述一遍。缩略图获取近期任务中显示的缩略图除

    8、了栈顶正在显示的task是实时的截取屏幕图像(见RecentsTvImpl的getThumbnailTransitionActivityOptionsForTV),其他的最终走的TaskRecord里的getLastThumbnail(见RecentsTaskLoadPlan的preloadPlan),这里实际是去读取文件,这些缩略图已经保存在/data/system_ce/0/recent_images文件夹下。getLastThumbnail只是把文件夹中的图片读取出来获取对应task的缩略图。具体流程见下图四: 图四但是这里除了栈顶的task其他的缩略图的读取都是在/data/syste

    9、m_ce/0/recent_images文件下,那这些图片是什么时候截取的呢?截图的时机是在activity onpause之后,我们从下图中可以看到可以看到执行截取图片的地方是在ActivityStack的screenshotActivitiesLocked这里,最终调用WindowManagerService的screenshotApplicationsInner。截图完成之后,最终通过saveImage方法保存到recent_images文件中截图流程图见图五: 图五近期任务显示上面讲解了task的获取及缩略图的获取,task的获取及缩略图的获取都是近期任务的显示的前提。从PhoneWi

    10、ndowManager获取到HOME按键消息后,先执行preloadRecentApps来获取recentTask,然后执行toggleRecentApps调起RecentsTvActivity显示。在RecentsTvActivityonResume时,会调用updateRecentsTasks()来获取前面的recentTask并在UI中显示出来。具体的流程可以见图六。图六RecentsTvActivity的layout文件是recents_on_tv.xml,在里面我们可以看到主要的view控件是TaskStackHorizontalGridView。下面类图即UI显示过程中所涉及到的所

    11、有的类:图七RecentAPP删除流程近期任务显示后,用户可以通过遥控器按键操作删除近期任务,跳转某个应用的操作,在这里我们主要讲解删除近期任务的流程。当从RecentsActivity移除某一个应用时,实际会调用到removeTask,然后调用到ams的removeTask方法,参数taskId为要移除的TaskRecord的id,然后调用ActivityManagerService的removeTaskByIdLocked,这里我们来分析下removeTaskByIdLocked的参数:taskid为要移除的task id,killProcess为true,表示要杀掉该taskrecord

    12、里所有activity所在的进程,removeFromRecents为true,表示要从mRecentTasks移除。接着通过taskid找到该TaskRecord,然后首先调用了TaskRecord的removeTaskActivitiesLocked方法,传递下来的参数activityNdx = 0,表示吧整个TaskRecord移除。这里的mActivities是该TaskRecord中保存的所有ActivityRecord对象,stack是该TaskRecord所在的ActivityStack,这里不为空,所以会调用ActivityStack的finishActivityLocked方

    13、法去移除该TaskRecord中的ActivityRecord对象。从ActivityStack移除完TaskRecord之后回到removeTaskByIdLocked,然后又调用了cleanUpRemovedTaskLocked方法,如果参数removeFromRecents为true,会先将该TaskRecord从mRecentTasks中移除,然后过滤出可以杀掉的Process的ProcessRecord信息,放到procsToKill列表中。具体删除近期任务流程见图八:总结以上我们就可以对recentApp有一个整体的认识,recentAPP是通过StatusBarManagerService调起,然后从调用到界面显示有两个步骤Task获取和Task显示。Task获取又包含Task的赋值和缩略图的获取,这两个组成了近期任务显示所需的RecentTaskInfo信息。而recentTask的删除工作主要是在ActivityManagerService中完成。


    注意事项

    本文(recentApps 处理流程Word文档格式.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开