Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)过程分析

Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)过程分析

ID:37909511

大小:274.50 KB

页数:36页

时间:2019-06-02

Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)过程分析_第1页
Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)过程分析_第2页
Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)过程分析_第3页
Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)过程分析_第4页
Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)过程分析_第5页
资源描述:

《Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)过程分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android窗口管理服务WindowManagerService切换Activity窗口(AppTransition)的过程分析在Android系统中,同一时刻只有一个Activity组件是处于激活状态的,因此,当ActivityManagerService服务激活了一个新的Activity组件时,它就需要通知WindowManagerService服务将该Activity组件的窗口显示出来,这会涉及到将焦点与屏幕等资源从前一个激活的Activity组件切换到后一个激活的Activity组件的过程,

2、本文就详细分析这个过程。Activity窗口的切换操作是在新激活的Activity组件的启动过程进行的。具体来说,就是在前一个激活的Activity组件进入到Paused状态并且新激活的Activity组件进之到Resumed状态之后,将前一个激活的Activity组件的窗口设置为不可见,以及将新激活的Activity组件的窗口设置为可见。整个切换过程是需要在ActivityManagerService服务与WindowManagerService服务的协作之下进行的,如图1所示。WindowMana

3、gerService服务在执行Activity窗口的切换操作的时候,会给参与切换操作的Activity组件的设置一个动画,以便可以向用户展现一个Activity组件切换效果,从而提高用户体验。事实上,一个Activity窗口在由不可见状态切换到可见状态的过程中,除了会被设置一个Activity组件切换动画之外,还有被设置一个窗口进入动画,此外,如果该Activity窗口是附加在另外一个窗口之上的,并且这个被附加的窗口正在显示一个动画,那么这个动画也同时会被设置给到该Activity窗口的显示过程中去。

4、本文主要是关注Activity窗口的切换操作,在接下来的一篇文章中分析窗口的动画框架时,我们再详细分析上述三种动画是如何作用在窗口的显示过程中的。从前面一文可以知道,ActivityManagerService服务在启动一个Activity组件的过程中,会调用到ActivityStack类的成员函数startActivityLocked。ActivityStack类的成员函数startActivityLocked首先会给正在启动的Activity组件准备一个切换操作,接着再调用其它的成员函数来通知前一

5、个激活的Activity组件进入到Paused状态。等到前一个激活的Activity组件进入到Paused状态之后,ActivityManagerService服务就会检查用来运行正在启动的Activity组件的进程启动起来了没有。如果这个进程还没有启动,那么ActivityManagerService服务就会将该进程启动起来,然后再调用ActivityStack类的成员函数realStartActivityLocked来将正在启动的Activity组件加载起来,并且将它的状态设置为Resumed,最

6、后通知WindowManagerService服务执行前面所准备的切换操作。接下来,我们就从ActivityStack类的成员函数startActivityLocked开始分析Activity窗口的切换过程,如图2所示。这个过程可以分为9个步骤,接下来我们就详细分析每一个步骤。Step1.ActivityStack.startActivityLocked[java]viewplaincopy在CODE上查看代码片派生到我的代码片publicclassActivityStack{......privat

7、efinalvoidstartActivityLocked(ActivityRecordr,booleannewTask,booleandoResume){finalintNH=mHistory.size();intaddPos=-1;if(!newTask){//Ifstartinginanexistingtask,findwherethatis.........}//Placeanewactivityattopofstack,soitisnexttointeract//withtheuser.if

8、(addPos<0){addPos=NH;}......//SlottheactivityintothehistorystackandproceedmHistory.add(addPos,r);......if(NH>0){......if((r.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_ANIMATION)!=0){mService.mWindowManager.prepareAppTransition(Win

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。