Android窗口管理服务WindowManagerService显示Activity组件启动窗口(Starting Window)过程分析

Android窗口管理服务WindowManagerService显示Activity组件启动窗口(Starting Window)过程分析

ID:37915408

大小:401.00 KB

页数:40页

时间:2019-06-02

Android窗口管理服务WindowManagerService显示Activity组件启动窗口(Starting Window)过程分析_第1页
Android窗口管理服务WindowManagerService显示Activity组件启动窗口(Starting Window)过程分析_第2页
Android窗口管理服务WindowManagerService显示Activity组件启动窗口(Starting Window)过程分析_第3页
Android窗口管理服务WindowManagerService显示Activity组件启动窗口(Starting Window)过程分析_第4页
Android窗口管理服务WindowManagerService显示Activity组件启动窗口(Starting Window)过程分析_第5页
资源描述:

《Android窗口管理服务WindowManagerService显示Activity组件启动窗口(Starting Window)过程分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(StartingWindow)的过程分析在Android系统中,Activity组件在启动之后,并且在它的窗口显示出来之前,可以显示一个启动窗口。这个启动窗口可以看作是Activity组件的预览窗口,是由WindowManagerService服务统一管理的,即由WindowManagerService服务负责启动与结束。在本文中,我们就详细分析WindowManagerService服务启动与结束Activity组件的启动窗口的过程。Activity组件的启动窗口是由Activity

2、ManagerService服务来决定是否要显示的。如果需要显示,那么ActivityManagerService服务就会通知WindowManagerService服务来为正在启动的Activity组件显示一个启动窗口,而WindowManagerService服务又是通过窗口管理策略类PhoneWindowManager来创建这个启动窗口的。这个过程如图1所示。窗口管理策略类PhoneWindowManager创建完成Activity组件的启动窗口之后,就会请求WindowManagerService服务将该启动窗口显示出来。当Activity组件启动完成,并且它的窗口也显示出来的

3、时候,WindowManagerService服务就会结束显示它的启动窗口。注意,Activity组件的启动窗口是由ActivityManagerService服务来控制是否显示的,也就是说,Android应用程序是无法决定是否要要Activity组件显示启动窗口的。接下来,我们就分别分析Activity组件的启动窗口的显示与结束过程。一.Activity组件的启动窗口的显示过程从前面一文可以知道,Activity组件在启动的过程中,会调用ActivityStack类的成员函数startActivityLocked。注意,在调用ActivityStack类的成员函数startActiv

4、ityLocked的时候,Actvitiy组件还处于启动的过程,即它的窗口尚未显示出来,不过这时候ActivityManagerService服务会检查是否需要为正在启动的Activity组件显示一个启动窗口。如果需要的话,那么ActivityManagerService服务就会请求WindowManagerService服务为正在启动的Activity组件设置一个启动窗口。这个过程如图2所示。这个过程可以分为6个步骤,接下来我们就详细分析每一个步骤。Step1.ActivityStack.startActivityLocked[java]viewplaincopy在CODE上查看代码

5、片派生到我的代码片publicclassActivityStack{......//Settofalsetodisablethepreviewthatisshownwhileanewactivity//isbeingstarted.staticfinalbooleanSHOW_APP_STARTING_PREVIEW=true;......privatefinalvoidstartActivityLocked(ActivityRecordr,booleannewTask,booleandoResume){finalintNH=mHistory.size();......intaddPo

6、s=-1;......//Placeanewactivityattopofstack,soitisnexttointeract//withtheuser.if(addPos<0){addPos=NH;}......//SlottheactivityintothehistorystackandproceedmHistory.add(addPos,r);......if(NH>0){//Wewanttoshowthestartingpreviewwindowifweare//switchingtoanewtask,orthenextactivity'sprocessis//notcurre

7、ntlyrunning.booleanshowStartingIcon=newTask;ProcessRecordproc=r.app;if(proc==null){proc=mService.mProcessNames.get(r.processName,r.info.applicationInfo.uid);}if(proc==null

8、

9、proc.thread==null){showStartingIcon=true;}......mSe

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

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

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