Android 4.0 ICS SystemUI浅析——SystemUI启动流程_com.android.systemmui-程序员宅基地

技术标签: system  service  android  icons  class  notifications  Android  

       阅读Android 4.0源码也有一段时间了,这次是针对SystemUI的一个学习过程。本文只是对SystemUI分析的一个开始——启动流程的分析,网上有很多关于2.3的SystemUI的分析,可4.0与2.3的差别还是很大的,为了给自己留下笔记同时也方便大家学习和探讨,遂写此文,后续将有更多关于SystemUI的分析,敬请关注。

       转载请注明出处:http://blog.csdn.net/yihongyuelan

       1.初始SystemUI

       什么是SystemUI?你或许会觉得这个问题很幼稚,界面上的布局UI显示?系统的UI?如果你是这么想的,那么就大错特错了。我们知道Android 4.0 ICS同时适用于Phone和Tablet(TV),因此,对于Phone来说SystemUI指的是:StatusBar(状态栏)、NavigationBar(导航栏)。而对于Tablet或者是TV来说SystemUI指的是:CombinedBar(包括了StatusBar和NavigationBar)。注:关于Android 4.0的UI介绍请参考这篇文章

       根据上面的介绍,我想大家应该知道SystemUI的具体作用了吧!也就是说我们的Phone的信号,蓝牙标志,Wifi标志等等这些状态显示标志都会在StatusBar上显示。当我们的设备开机后,首先需要给用户呈现的就是各种界面同时也包括了我们的SystemUI,因此对于整个Android系统来说,SystemUI都有举足轻重的作用,那接下来就来看看它的启动流程吧!

       2.启动流程

       这里只是单单的分析启动流程,实际上SystemUI启动过程中涉及到很多东西的调用,这里暂时不分支去介绍,后续会有相关文章的详细分析。那么对于这种分析我还是将自己的分析思路写出来,而不是直接展现已经分析好的结果,当然结果会在最后展示出来。这样做一方面有利于锻炼自己的分析能力,另一方面各位看官也可以找出分析中的利与弊从而更好的取舍。

       首先来看看SystemUI的代码位置,路径:SourceCode/frameworks/base/packages/SystemUI;其次看看它的代码梗概:

图 2.1

      在Android 4.0中,Google整合了Phone和Tablet(TV)的SystemUI,也就说可以根据设备的类型自动匹配相应的SystemUI。这一点是在Android 2.3中是没有的。那么接下来怎么分析呢?打开AndroidManifest.xml可以看到:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.android.systemui"
        coreApp="true"
        android:sharedUserId="android.uid.system"
        android:process="system"
        >

    <uses-permission android:name="android.permission.STATUS_BAR_SERVICE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.MANAGE_USB" />

    <application
        android:persistent="true"
        android:allowClearUserData="false"
        android:allowBackup="false"
        android:hardwareAccelerated="true"
        android:label="@string/app_label"
        android:icon="@drawable/ic_launcher_settings">

        <!-- Broadcast receiver that gets the broadcast at boot time and starts
             up everything else.
             TODO: Should have an android:permission attribute
             -->
        <service android:name="SystemUIService"
            android:exported="true"
            />

        <!-- started from PhoneWindowManager
             TODO: Should have an android:permission attribute -->
        <service android:name=".screenshot.TakeScreenshotService"
            android:process=":screenshot"
            android:exported="false" />

        <service android:name=".LoadAverageService
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yihongyuelan/article/details/7623578

智能推荐

PVE FRP MySQL 端口映射_frp pve-程序员宅基地

文章浏览阅读1.3k次。PVE FRP MySQL 端口映射前言虚拟软件(PVE,VMWare,Docker,VirtualBox)如果用有线连接除宿主机之外的主机均有可能连不上虚拟机里的MySQL,使用Wifi 就100% 能连上目前已知的解决办法是用frp 做虚拟机和宿主机的端口映射,然后其他机器访问宿主机服务端# 创建安装目录mkdir -p /opt/modules# 下载frpcd && wget https://github.com/fatedier/frp/releases/dow_frp pve

联合概率数据互联(JPDA) ----多假设跟踪(MHT)-程序员宅基地

文章浏览阅读3.8w次,点赞36次,收藏237次。联合概率数据关联(Joint Probabilistic Data Association,JPDA) 联合概率数据互联JPDA是数据关联算法之一,它的基本思想是:对应于观测数据落入跟踪门相交区域的情况,这些观测数据可能来源于多个目标。JPDA的目的在于计算观测数据与每一个目标之间的关联概率,且认为所有的有效回波都可能源于每个特定目标,只是它们源于不同目标的概率不同。JPDA算法的..._多假设跟踪

ARKit从入门到精通(1)-ARKit初体验-程序员宅基地

文章浏览阅读10w+次,点赞59次,收藏161次。ARKit从入门到精通(1)-ARKit初体验转载请标注出处:http://blog.csdn.net/u013263917/article/details/72903174,以及版权归属黑马程序员:http://www.itheima.com1.1-AR技术简介增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像、视频、3D模型的技_arkit

git查看commit历史,某次commit修改内容,指定文件修改历史_如何查看历史commi的修改信息-程序员宅基地

文章浏览阅读7.2k次。git log 查看commit的历史 git show 查看某次commit的修改内容 git log -p 查看某个文件的修改历史 git log -p -2查看最近2次的更新内容_如何查看历史commi的修改信息

python安装win32模块_安装win32file-程序员宅基地

文章浏览阅读4.5w次,点赞6次,收藏12次。pip install pypiwin32不过清华源和豆瓣源都会安装报错,最后直接用pycharm安装成功了。PACKAGE CONTENTS _win32sysloader _winxptheme mmapfile odbc perfmon servicemanager timer win2kras win32api win32clip..._安装win32file

查看windows属于激活状态_用bat实现显示操作版本以及激活情况-程序员宅基地

文章浏览阅读990次。1.搜索如下字符串slmgr.vbs /dli2.运行即可看到windos激活状态了要是嫌以上步骤麻烦直接使用批处理命令@echo offstart /d "C:\Windows\System32" slmgr.vbs /dliexit以上命令保存为.bat的文件,需要查看时只需要双击它就可以了懒癌晚期请直接下载笔者已经上传的bat文件(下载到本地双击打开就可以查看了):CSDN资源蓝奏下载微软激活方式有以下几种:..._用bat实现显示操作版本以及激活情况

随便推点

APP兼容性测试_为什么app要测兼容性-程序员宅基地

文章浏览阅读1.1k次。主要测试内部和外部兼容性1)与本地及主流App是否兼容2)与各种设备是否兼容,若有跨系统支持则需要检验是否在个系统下,各种行为是否一致。不同手机屏幕分标率的兼容性不同手机品牌的兼容性..._为什么app要测兼容性

关于串行通信、通信接口、接口连接器、通信协议的理解_通讯器,连接器,串口器的区别-程序员宅基地

文章浏览阅读3.8k次,点赞2次,收藏4次。串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远距离通信。通信接口是指中央处理器和标准通信子系统之间的接口。(是否可以理解为对电气特性的定义?)串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流_通讯器,连接器,串口器的区别

Android面试题精选——再聊Android-Handler机制-2(1),一次关于JVM的面试经历-程序员宅基地

文章浏览阅读583次,点赞29次,收藏25次。写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于Flutter的学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的。

设计模式中工厂方法与抽象工厂之间的区别联系-程序员宅基地

文章浏览阅读379次,点赞5次,收藏5次。无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》

自己写一个Map (实现Map接口并利用散列原理)-程序员宅基地

文章浏览阅读1.8k次。1.EntryMap是java中的接口,Map.Entry是Map的一个内部接口。Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V&g..._自己写一个map

没问题的项目突然报java.net.BindException: Address already in use: bind_websocket address in use-程序员宅基地

文章浏览阅读7.6k次。项目里面用到了websocket,确定端口号没有其他服务在使用,一直都跑的好好的,突然抽风报java.net.BindException: Address already in use: bind,说是端口被占用,打断点看到初始化websocket的时候抛出异常,端口被占用。疯狂clean object,重开eclipse,外加百度,都没有用。最后问了同事,让我看看是不是后台进程没有杀掉,一看..._websocket address in use