android zygote 到launcher的启动关键点
来源:互联网 发布:淘宝图片保护怎么弄 编辑:程序博客网 时间:2024/05/16 17:09
zygote 启动:app_main.cpp main()
设置process name为zygote,
AppRuntime->start(), 有可能为com.android.internal.os.ZygoteInit(开机为此case) 或者 RuntimeInit.
startVm(): 通过property等加载各项dalvik 参数并启动VM。
startReg():注册各项native jni, 如media/graphic/os/view/opengl/hardware/database/...
找到java 类并call对应类中的main方法,开机对应到ZygoteInit里的main();
ZygoteInit: main()
registerZygoteSocket(): 创建一个socket 接收zygote命令。
preload():加载classes, resources,opengl.
startSystemServer():
Zygote.forkSystemServer()
Zygote类是vm中native定义的类,
fork启动SystemServer
子进程进入handleSystemServerProcess()----------->下面继续
runSelectLoop():父进程继续执行
while循环accept zygote server socket
有新的需求后,ZygoteConnection.runOnce
forkAndSpecialize();
子进程:handleChildProc()
invokeStaticMain()启动new request的main函数。
主要的实现方式是通过抛出异常,MethodAndArgsCaller,然后回到ZygoteInit: main()有catch到而继续执行,MethodAndArgsCaller.run。
父进程: handleParentProc():会做一些清理工作,如果需求继续处理,并不会remove当前request。
closeServerSocket():父进程close server socket
子进程进入handleSystemServerProcess:
RuntimeInit.zygoteInit()
RuntimeInit.applicationInit()
invokeStaticMain: SystemServer.main()
ServerThread()
:initAndLoop启动各个framework service: AMS/WMS/PMS/....
ActivityManagerService.main() 中AMS systemready时会启动launcher。
Launcher启动:
Launcher的intent-filter会有HOME标签。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
AMS.startRunning();
AMS.systemReady();
resumeTopActivitiesLocked();
resumeTopActivityLocked();
ActivityStackSupervisor.resumeHomeActivity();
AMS.startHomeActivityLocked(Home intent:category.HOME);
System_server启动参数。
String args[] = {
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1032,3001,3002,3003,3006,3007",
"--capabilities=" + capabilities + "," + capabilities,
"--runtime-init",
"--nice-name=system_server",
"com.android.server.SystemServer",
设置process name为zygote,
AppRuntime->start(), 有可能为com.android.internal.os.ZygoteInit(开机为此case) 或者 RuntimeInit.
startVm(): 通过property等加载各项dalvik 参数并启动VM。
startReg():注册各项native jni, 如media/graphic/os/view/opengl/hardware/database/...
找到java 类并call对应类中的main方法,开机对应到ZygoteInit里的main();
ZygoteInit: main()
registerZygoteSocket(): 创建一个socket 接收zygote命令。
preload():加载classes, resources,opengl.
startSystemServer():
Zygote.forkSystemServer()
Zygote类是vm中native定义的类,
fork启动SystemServer
子进程进入handleSystemServerProcess()----------->下面继续
runSelectLoop():父进程继续执行
while循环accept zygote server socket
有新的需求后,ZygoteConnection.runOnce
forkAndSpecialize();
子进程:handleChildProc()
invokeStaticMain()启动new request的main函数。
主要的实现方式是通过抛出异常,MethodAndArgsCaller,然后回到ZygoteInit: main()有catch到而继续执行,MethodAndArgsCaller.run。
父进程: handleParentProc():会做一些清理工作,如果需求继续处理,并不会remove当前request。
closeServerSocket():父进程close server socket
子进程进入handleSystemServerProcess:
RuntimeInit.zygoteInit()
RuntimeInit.applicationInit()
invokeStaticMain: SystemServer.main()
ServerThread()
:initAndLoop启动各个framework service: AMS/WMS/PMS/....
ActivityManagerService.main() 中AMS systemready时会启动launcher。
Launcher启动:
Launcher的intent-filter会有HOME标签。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
AMS.startRunning();
AMS.systemReady();
resumeTopActivitiesLocked();
resumeTopActivityLocked();
ActivityStackSupervisor.resumeHomeActivity();
AMS.startHomeActivityLocked(Home intent:category.HOME);
System_server启动参数。
String args[] = {
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1032,3001,3002,3003,3006,3007",
"--capabilities=" + capabilities + "," + capabilities,
"--runtime-init",
"--nice-name=system_server",
"com.android.server.SystemServer",
0 0
- android zygote 到launcher的启动关键点
- zygote 之前的 android init关键点
- Android研究-Android的init启动到launcher启动-主要分析zygote服务
- Android研究-Android的init启动到launcher启动-主要分析zygote服务
- Android研究-Android的init启动到launcher启动-主要分析zygote服务
- Android从BIOS到Zygote到SystemService到Launcher启动概况
- 《老罗的Android之旅》阅读笔记——Launcher和Zygote的启动过程
- Android Zygote 进程的启动
- Android的zygote SystemServer的启动
- Android的启动过程: zygote & Services & HomeScreen
- Android -- 系统进程Zygote的启动分析
- Android启动过程的Zygote进程
- Android上层启动过程的几个关键点
- Android上层启动过程的几个关键点
- Android zygote启动流程
- Android zygote进程启动
- android启动之zygote启动
- zygote system_server的启动
- 多态性:方法重写和重载
- ubuntu上JDK安装
- java多线程并发访问解决方案
- svg.draggable.js-实现svg拖拽的js插件
- android wifi 问题定位
- android zygote 到launcher的启动关键点
- Socket编程与线程
- [经典面试题][网易]数组分割
- UVA1449 AC自动机
- Android从系统启动-->Launcher加载-->用户应用开启
- codeforces #247D Random Task (数位dp+二分搜索)
- poj 1703 Find them, Catch them 带权并查集OR种类并查集
- 解决python中用zipfile解压缩文件时中文文件名乱码的问题
- 数组中出现次数超过一半的数字