android视频教程

android视频教程

5 (13人评价)
  • 课时:(26)

  • 学员:(409)

  • 浏览:(15203)

  • 加入课程

android视频教程8的笔记

相关课时: 笔记详情:

学习思路,重在理解,多看几遍,难度较深。涉及java,c,c++

Zyugote(孵化器)进程是什么?

 

一、linux启动:

bootloader

kernel

 

二、android系统启动-Init.rc启动(system/bin下的系统启动配置文件、脚本) 

/system/bin/ServiceManager--Binder守护进程(和界面无关,会持续运行在后台,会用来接收响应和维持系统运营。apache服务器的服务监听就是个守护进程)

Runtime

Zygote-app_process/App_main

Start VM

System Server

start android services-Register to ServiceManager

start launcher

 

uml图

/system/bin/ServiceManager

Zygote----app_main.cpp:main()

AndroidRuntime.cpp:start()

              JNI invoke

ZygoteInit.java:main()

SystemServer.java:

main()

init1()

      com_android_server_systemService.cpp

      system_init.cpp

init2() 调用runtime->callStatic

(),启动ServerThread(核心服务在这里):

     PowerManagerService

     ActivityManagerService

     WindowManagerService

     PackageManagerService(最重要的,应用程序靠这个启动)

     ...

 

跟踪代码。

Init.rc(system/core/)两处关键启动:

service servicemanager /system/bin/servicemanager(守护进程,早于启动虚拟机)

service zygote /system/bin/app_process ...(启动系统服务)

 

ServiceManager.cpp

start()   (运行在后台,让后面虚拟机启动,池的启动有个正常的环境)

 

app_main.cpp(类)

main() 添加虚拟机参数;设置了一个进程,名为zygote;runtime.start()启动了一个类ZygoteInit;runtime是个AppRuntime类;猜ZygoteInit是孵化虚拟机的,每启动一个应用都启动一个虚拟机

 

zytogeInit.java

main() startSystemServer()启动系统服务;永久的循环监听,一直运行runSelectLoopMode() (socket通讯也会这样做),得到socket通讯的请求,来启动一个虚拟机(startSystemServer()启动虚拟机,名字叫SystemServer)。

 

SystemServer.java(framework下)

main()调用Init1()是个native JNI的调用。找到对应文件夹的cpp源文件/frameworks/base/services/jni/com_android_server_SystemServer.cpp

 

com_android_server_SystemServer.cpp

c的动态链接extern "C" int system_init();

 

system_init.cpp

runtime->callStatic 调回去SystemServer,init2方法

 

SystemServer.java

Init2()启动线程ServerThread()---每个系统的service的启动线程,开机就启动,远程的;

ServerThread()中PackageManagerService等系统service的启动。

此后再启动launcher,完成启动。

 

三、应用程序启动-Running PackageManager

0 0

你感兴趣的课程

8万+浏览/ 916学员/ 4.5评分
免费
6万+浏览/ 177学员/ 5评分
免费
6万+浏览/ 973学员/ 4.8评分
免费