Android5.1SystemUI详解 - 图文(3)

2020-02-21 18:15

关组件,startServicesIfNeeded(),这里启动了各种Service,但是它们并不是真正的Service ,是继承了SystemUI.java这个抽象类,复写了start()方法。

这几个UI组件,重点关注SystemBars的start()方法;它又启动了

ServiceMonitor的start()方法;在此方法里面,通过Handler发

mHandler.sendEmptyMessage消息,分别调用了 StartService() 和 continueStartService()两个方法。

然后,调用:mCallbacks.onNoService();回到SystemBars 的对象中;这里调用关键方法:createStatusBarFromConfig();这里面的取值:R.string.config_statusBarComponent实际就是PhoneStatusBar;

配置文件:base/packages/SystemUI/res/values/config.xml; 这样就调到了PhoneStatusBar的start()方法。同时PhoneStatusBar在start()方法里面也调用了父类BaseStatusBar的start();从这里一些列,将NavigationBar和

QuickSettingPanel初始化好,添加到UI中。

SystemBars 中关键代码段:

启动时序图:

2.NavigationBar

导航栏

PhoneStatusBar类的start()方法里面调用 addNavigationBar() ; 流程如上图,第 9 步;然后此方法内调用 prepareNavigationBarView();最后 WindowManager调addView将NavigationBarView添加到 UI 界面。

NavigationBar主要包含三个按钮:

Back,Home和Recent。

PhoneStatusBar类中 prepareNavigationBarView() 方法代码段:

3.RecentsActivity

最近的APP

上一步,初始化NavigationBar时,初始化了Recent的点击事件;

mRecentsClickListener:

mRecentsClickListener 事件定义:

这里 toggleRecentApps() 方法给BaseStatusBar发Handler消息 Message;

程如下,时序图:

Recent是SystemUI的之类;Recent启动RecentsActivity; RecentsActivity里面装载RecentPanelView;

如果RecentTaskLoader取得的FirstTask为Null,则显示无最近打开的APP。否在刷新显示列表(refreshRecentTasksList()), 后台加载最近打开的APP列表loadTasksInBackground() 。

(1)第三方APP访问Recent

Recent键的点击事件是在framework层进行处理的,不再往下传递;因此第三方APP在onKeyDown()与dispatchKeyEvent()方法中都不能捕获RECENT_APP_KEY的动作。

不过,在应用中添加以下代码就可以屏蔽了RECNET_APP_KEY:


Android5.1SystemUI详解 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:竣工图的编制与归档

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: