android 9.0新ui,SystemUI分析(Android9.0)

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

一、SystemUI组成

SystemUI是Android的系统界面,包括状态栏statusbar、锁屏keyboard、任务列表recents等等,都继承于SystemUI这个类,如锁屏KeyguardViewMediator。

1794ceb571258edea0355e492da21961.png

二、SystemUI启动流程

SystemUI的启动由SystemServer开始。SystemServer由Zygote fork生成的,进程名为system_server,该进程承载着framework的核心服务。Zygote启动过程中会调用startSystemServer()。SystemUI的分析从SystemServer的main方法开始。SystemUI启动的大致流程如下:

f5a44ef368bb4e860e8cea4ed54300c1.png

2.1 SystemServer

SystemServer在run方法中负责启动系统的各种服务。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15..........

// Start services.

try {

traceBeginAndSlog("StartServices");

startBootstrapServices();

startCoreServices();

startOtherServices();

SystemServerInitThreadPool.shutdown();

} catch (Throwable ex) {

Slog.e("System", "******************************************");

Slog.e("System", "************ Failure starting system services", ex);

throw ex;

} finally {

traceEnd();

}

在startOtherServices方法中先是创建并添加WindowManagerService、InputManagerService等service,并且调用startSystemUi方法,跳转SystemUIService。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25private void startOtherServices() {

//创建,注册服务

...

WindowManagerService wm = null;

SerialService serial = null;

NetworkTimeUpdateService networkTimeUpdater = null;

CommonTimeManagementService commonTimeMgmtService = null;

InputManagerService inputManager = null;

...

traceBeginAndSlog("IpConnectivityMetrics");

mSystemServiceManager.startService(IpConnectivityMetrics.class);

traceEnd();

traceBeginAndSlog("NetworkWatchlistService");

mSystemServiceManager.startService(NetworkWatchlistService.Lifecycle.class);

traceEnd();

...

traceBeginAndSlog("StartSystemUI");

try {

startSystemUi(context, windowManagerF);

} catch (Throwable e) {

reportWtf("starting System UI", e);

}

启动跳转SystemUIService。

1

2

3

4

5

6

7

8

9static final void startSystemUi(Context context, WindowManagerService windowManager) {

Intent intent = new Intent();

intent.setComponent(new ComponentName("com.android.systemui",

"com.android.systemui.SystemUIService"));

intent.addFlags(Intent.FLAG_DEBUG_TRIAGED_MISSING);

//Slog.d(TAG, "Starting service: " + intent);

context.startServiceAsUser(intent, UserHandle.SYSTEM);

windowManager.onSystemUiStarted();

}

2.2 SystemUIService

SystemUIService在onCreate中调用SystemUIApplication的startServicesIfNeeded方法。

1

2

3

4

5

6

7

8

9

10

11

12@Override

public void onCreate() {

super.onCreate();

((SystemUIApplication) getApplication()).startServicesIfNeeded();

// For debugging RescueParty

if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean("debug.crash_sysui", false)) {

throw new RuntimeException();

}

...

}

2.3 SystemUIApplication

SystemUIApplication先获取配置的systemUI组件。

1

2

3

4public void startServicesIfNeeded() {

String[] names = getResources().getStringArray(R.array.config_systemUIServiceComponents);

startServicesIfNeeded(names);

}

配置文件在/frameworks/base/packages/SystemUI/res/values/config.xml中,配置的systemui组件如图:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

332 com.android.systemui.Dependency

333 com.android.systemui.util.NotificationChannels

334 com.android.systemui.statusbar.CommandQueue$CommandQueueStart

335 com.android.systemui.keyguard.KeyguardViewMediator

336 com.android.systemui.recents.Recents

337 com.android.systemui.volume.VolumeUI

338 com.android.systemui.stackdivider.Divider

339 com.android.systemui.SystemBars

340 com.android.systemui.usb.StorageNotification

341 com.android.systemui.power.PowerUI

342 com.android.systemui.media.RingtonePlayer

343 com.android.systemui.keyboard.KeyboardUI

344 com.android.systemui.pip.PipUI

345 com.android.systemui.shortcut.ShortcutKeyDispatcher

346 @string/config_systemUIVendorServiceComponent

347 com.android.systemui.util.leak.GarbageMonitor$Service

348 com.android.systemui.LatencyTester

349 com.android.systemui.globalactions.GlobalActionsComponent

350 com.android.systemui.ScreenDecorations

351 com.android.systemui.fingerprint.FingerprintDialogImpl

352 com.android.systemui.SliceBroadcastRelayHandler

353

在startServicesIfNeeded方法中,根据config配置创建SystemUI,并调用SystemUI的start方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31private void startServicesIfNeeded(String[] services) {

if (mServicesStarted) {

return;

}

mServices = new SystemUI[services.length];

final int N = services.length;

for (int i = 0; i < N; i++) {

String clsName = services[i];

if (DEBUG) Log.d(TAG, "loading: " + clsName);

log.traceBegin("StartServices" + clsName);

long ti = System.currentTimeMillis();

Class cls;

try {

cls = Class.forName(clsName);

mServices[i] = (SystemUI) cls.newInstance();

} catch(ClassNotFoundException ex){

throw new RuntimeException(ex);

} catch (IllegalAccessException ex) {

throw new RuntimeException(ex);

} catch (InstantiationException ex) {

throw new RuntimeException(ex);

}

mServices[i].mContext = this;

mServices[i].mComponents = mComponents;

if (DEBUG) Log.d(TAG, "running: " + mServices[i]);

mServices[i].start();

log.traceEnd();

...

}

2.4 SystemUI

SystemUI是一个抽象类,start()是抽象方法,具体实现在子类。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16public abstract class SystemUI implements SysUiServiceProvider {

public Context mContext;

public Map, Object> mComponents;

public abstract void start();

protected void onConfigurationChanged(Configuration newConfig) {

}

public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {

}

protected void onBootCompleted() {

}

...

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chromebook刷机_如何为不支持Chrome操作系统的网站欺骗Chromebook用户代理

chromebook刷机Not all browsers handle websites the same, and if they don’t support your operating system or browser, you could be denied access. Luckily, you can spoof the user agent on Chrome OS to make it look like you use a completely different system.…

cocos android-1,cocos2dx在windows下开发,编译到android上(1)

转自&#xff1a;http://www.2cto.com/kf/201205/130697.html下面我给大家介绍下&#xff0c;用vs2010开发cocos2dx&#xff0c;然后如何使其编译到android上。步骤如下&#xff1a;1、必要条件&#xff0c;你的eclipse能把代码编译到安卓手机或虚拟机上&#xff0c;如果这一步…

中药ppi网络图太杂乱_太杂乱了吗? 这是您的iPhone,iPad,Android或台式机的15张简约壁纸...

中药ppi网络图太杂乱Busy wallpaper images don’t work very well on your iPhone, iPad, or any device where you need to have lots of icons on the screen. Here’s a set of minimalistic wallpaper images that won’t clutter up your desktop. 繁忙的墙纸图像在iPhon…

初学者java学习计划_初学者:计划在Windows 7 Media Center中录制直播电视的时间

初学者java学习计划If you’re a new user to Windows 7 Media Center you know it can act as a DVR and pause or record Live TV. You can set up a schedule for it to record your favorite TV programs as well. 如果您是Windows 7 Media Center的新用户&#xff0c;则知…

如何在Office 2007中查看关于对话框和版本信息

One of our favorite readers wrote in today asking how to tell if his Word 2007 installation was running Service Pack 1, since he couldn’t find the About dialog, which got me thinking… I bet most people don’t know where it is! 我们最喜欢的一位读者今天写信…

windows全局热键_在Windows中创建快捷方式或热键以清除剪贴板

windows全局热键Have you ever copied something to the clipboard that you don’t want to leave there in case somebody else is going to use your computer? Sure, you can copy something else to the clipboard real quick, but can’t you just make a shortcut or h…

获取outlook 会议_如何仅在Microsoft Outlook中仅获取您关注的电子邮件的通知

获取outlook 会议Some emails are more important than others. Rather than getting alerts every time an email arrives, configure Microsoft Outlook to only alert you when the important stuff hits your inbox, rather than any old email that can wait until you ch…

jq html 多一个引号,为什么jQuery模板会为某些字符串添加双引号

背景我正在使用jQuery模板,ASP.Net MVC Razor视图和Twitter.问题使用带有一些字符串的jQuery模板会自动导致这些字符串被包含在“细节我创建了一个如下所示的jQuery模板&#xff1a;before ${text.parseUserName().parseHashTag()} after${created_at}${prettyDate(created_at)…

从Windows计算机上完全删除iTunes和其他Apple软件

If you are giving up on iTunes for another music player, uninstalling it completely can be a hassle. Here we show you how to completely remove all traces of it including QuickTime, iTunes Helper, Bonjour…all of it. 如果您在iTunes上放弃了其他音乐播放器&…

html仿微信滑动删除,使用Vue实现移动端左滑删除效果附源码

左滑删除在移动端是很常见的一种操作&#xff0c;常见于删除购物车中的商品&#xff0c;删除收藏夹中文章等等场景。我们只需要手指按住要删除的对象&#xff0c;然后轻轻向左滑动&#xff0c;便会出现删除按钮&#xff0c;然后点击删除按钮即可删除对象。点击下载源码今天我给…

h5 领取优惠券 下载_下载7天免费试用版或购买VideoProc,可享受60%优惠券[赞助的帖子]...

h5 领取优惠券 下载You may have seen piles of video editing tools, but here we’ll show you a different one – VideoProc, developed by Digiarty Software, Inc. It is not a “standard” video editing program. Some consider VideoProc a complete toolbox also fo…

html走马观花效果,走马观花台湾行 用EF-S 10-18来记录风景

我在6月初入手无忌第一支10-18&#xff0c;初步测试后对其表现比较满意&#xff0c;具体可看http://forum.xitek.com/thread-1314865-1-1-1.html。7月初到8月中旬我都处于旅行状态中&#xff0c;佳能系统带了三支镜&#xff0c;包括EFS10-18&#xff0c;EFS55-250和EF24IS&…

文件下载至storage_如何防止Storage Sense在Windows 10上删除下载的文件

文件下载至storageStorage Sense is the Disk Cleanup replacement for the modern world. It frees up space on your computer by deleting things like recycle bin contents, temporary internet files, and app temporary files. This also includes the Downloads folder…

supervisord的安装使用

由于生产环境使用的的tomcat&#xff0c;项目比较重要&#xff0c;所以要做进程守护&#xff0c;本来打算自己写脚本&#xff0c;但是效果不理想&#xff0c;想了下还是用supervisord了 由于很久不用&#xff0c;所以写下来部署步骤 第一&#xff1a;安装&#xff0c;安装的方法…

如何在Windows 10上使用Microsoft Defender扫描文件或文件夹中的恶意软件

On Windows 10, Microsoft Defender (formerly called “Windows Defender”) always scans files before you open them unless you’ve installed a third-party antivirus. You can also perform a quick scan of any file or folder, too. Here’s how. 在Windows 10上&…

html中怎么获取搜索框中的值,百度API 搜索框,获取相应的地点的uid

在百度API的输入框中怎么根据搜索到的地址获取百度的uidbody, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";font-size:14px;}#l-map{height:300px;width:100%;}#r-result{width:100%;}关键字输入提示词条请输入:// 百度地图API功能function G(id…

uac2.0驱动_关闭Vista中令人讨厌的HP驱动程序UAC弹出更新检查

uac2.0驱动If you are using Vista and have an HP printer, especially of the All-In-One variety, you’ve probably noticed that once a week or so you get this obnoxious User Account Control popup dialog out of the blue asking for permission to run some Hewlet…

html5结构与表现分离原则,网页简单布局之结构与表现原则分享

一般来说html结构 css表现 javascrip行为&#xff0c;网页布局要考虑到结构&#xff0c;表现&#xff0c;行为分离原则&#xff0c;首先重点放在结构和语义化上面&#xff0c;再考虑CSS&#xff0c;JS等&#xff0c;便于后期维护和分析。结构与表现相关内容简介html结构 css表现…

如何在Firefox 3中重新启用about:config警告消息

If you’ve spent any time tweaking Firefox 3, you’ve probably seen the warning message telling you that you probably shouldn’t be changing any settings. Thankfully you can remove the checkbox and make the message go away… but what if you wanted it back?…

iaas层次化结构--从业务需求到设计需求

转载于:https://www.cnblogs.com/anc-ox/p/10004571.html