| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android实训(二):SystemService创建过程、fork、启动阶段和自定义服务 -> 正文阅读 |
|
[移动开发]Android实训(二):SystemService创建过程、fork、启动阶段和自定义服务 |
SystemServersystemServer是由zygote进程fork出来的进程,它分配所有的服务 1.基础理论1.1 forkfork用于创建一个新进程,它和原来的进程同时运行,原进程为父进程,一般情况而言,子进程和父进程的大部分值相同,少部分值不同,可以看作是进程的克隆 fork()的返回值不同代表内容不同 负值:创建子进程失败,一般失败是因为进程的数量达到上限和内存不足 零:返回到新创建的子进程 正值:返回父进程,并伴随子进程的进程ID 进程调用fork后转入内核,有以下操作:
1.2 反射java的反射机制详见 java的注解和反射:自定义注解,java内存机制,类加载器,反射获得对象方法和注解_michilay的博客-CSDN博客 2.原理SystemServer是Android中重要的进程,常见的WMS(android.display)、AMS、PMS等,都是以一个线程的方式存在于SystemServer进程中。此进程在系统中的名称为“system_server”。它负责启动系统的各项服务,大体有以下几个过程:
也就是说,SystemServer先初始化,接着分别启动Boot级别,核心级别和其他级别的服务,在这个过程中,SystemServiceManager的startBootPhase()非常重要
SystemServer启动流程 1:Zygote通过ZygoteInit来fork出SystemServer进程 站在框架的角度来看,Zygote启动了SystemServer,它帮助我们创建了很多例如AMS、PMS、WMS等关键服务,同时,ServiceManager使用静态方法addService将这些关键服务放到ServiceManager中,当App层的Laucher等应用需要使用时直接调用 代码位于 frameworks/base/services/java/com/android/server/SystemServer.java 3.服务介绍3.1 Boot级别服务:starBootstrapServices,一共有十二个核心服务Installer负责安装apk AMS负责四大组件的启动切换调度等 PMS负责电源管理 LightsService负责指示灯 DisplayManagerService管理显示设备 PMS负责apk安装解析验证升级等工作 3.2 Core级别服务:startCoreServices,一共有四个服务BatteryService负责电池管理需要LightService UsageStatsService收集用户使用APP的频率和时长 WebViewUpdateService检测是否有可更新的Webview BinderCallsStatsService跟踪Binder调用的CPU时间小号 3.3 Other级别服务:startOtherServcies,共有几十个服务BluetoothService蓝牙相关 WifiService负责Wife … 此方法经历了五个启动阶段
在完成了这些阶段之后,会调用AMS的systemReady()方法,调用startHomeActivityLocked来启动桌面应用 启动完桌面后,会返回到SystemServer的run方法,会调用Looper.loop() 等待其他线程Handler发送消息 3.4 启动阶段SystemServer经历了上述三个阶段需要一个值来排序,SystemServiceManager提供了startBootPhase()贯穿了所有的进程启动过程 debug日志中可以看到数字的进度,方便调试 4.调试方法使用adb查看logcat可以查看各个server启动所耗时间
5.自定义服务
6.总结
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 0:49:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |