phonestatusbar.java_SystemUI源码分析之PhoneStatusBar启动流程简单分析

af975254a808d8098617c7bcc811dd78.png

下面两图让我们大概的了解了SystemUI代码结构和布局范围。

43fdb8e12ed586d79a89f0649b670ec9.png

dfb424dac587bde79e2528ab39a6bb4c.png

下面是Android SystemUI中包含的各项功能简介,虽然很多,但我这里只是讲解Status Bar,也就是系统上方的状态栏。看第二张图第一部分的顶部部分。

Status Bar 系统上方的状态栏

Navigator Bar 系统下方的导航栏

Keyguard 锁屏界面

PowerUI 电源界面

Recents Screen 近期任务界面

VolumeUI 音量调节对话框

Stack Divider 分屏功能调节器

PipUI 画中画界面

Screenshot 截屏界面

RingtonePlayer 铃声播放器界面

Settings Activity 系统设置中用到的一些界面,例如:NetworkOverLimitActivity,UsbDebuggingActivity等。

原归正传,我们从代码中查看SystemUI是如何启动的。我用的源码是Android 6.0 的,不过各个Android版本的启动过程大致是相同的。

1.SystemServer中启动SystemUIService

SystemService路径: base\services\java\com\android\server\SystemServer.java

SystemUIService的启动是在SystemServer中startSystemUi中启动的

static final void startSystemUi(Context context) {

Intent intent = new Intent();

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

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

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

context.startServiceAsUser(intent, UserHandle.OWNER);

}

而startSystemUi()在SystemServer中启动startOtherServices()中调用的。

private void startOtherServices() {

......

mActivityManagerService.systemReady(new Runnable() {

@Override

public void run() {

.......

try {

startSystemUi(context);

} catch (Throwable e) {

reportWtf("starting System UI", e);

}

...

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR`是一个View的系统UI标志,它可以用来改变Android设备的导航栏(虚拟按键栏)的颜色。 在Android 8.0及以上版本中,如果您想将虚拟按键栏的颜色更改为浅色(例如,从黑色变为白色),则可以使用该标志。 以下是如何使用`View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR`的步骤: 1. 在您的布局文件中,找到您想要更改虚拟按键栏颜色的视图(例如,一个Button或一个LinearLayout)。 2. 在Java代码中,获取该视图的引用,例如: ``` Button myButton = findViewById(R.id.my_button); ``` 3. 使用以下代码将`View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR`标志添加到该视图中: ``` if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { myButton.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); } ``` 注意,由于该标志只适用于Android 8.0及更高版本,在设置该标志之前,您需要检查设备的Android版本是否符合要求。 4. 如果您想要在应用程序的整个界面中使用该标志,您可以将其添加到Activity中的根视图中,例如: ``` if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); } ``` 这将在整个Activity中更改虚拟按键栏的颜色。 请注意,由于这个标志只适用于Android 8.0及以上版本,您需要在使用它之前检查设备的Android版本。另外,该标志只适用于具有虚拟按键的设备,例如Nexus和Pixel设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值