system_server运行机制

来源:互联网 发布:淘宝联盟——我的舞台 编辑:程序博客网 时间:2024/06/07 03:08

启动流程 & 与Zygote的关系

  • system_server启动流程可以参考zygote执行流程中怎么将system_server拉起来
  • 与zygote的关系:
1. system_server进程是Zygote进程fork出来的第一个子进程   String args[] = {       "--setuid=1000",       "--setgid=1000",       "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,3001,3002,3003,3006,3007",       "--capabilities=130104352,130104352",       "--runtime-init",       "--nice-name=system_server",       "com.android.server.SystemServer",   };2. system_server进程的程序入口:   com.android.server.SystemServer类的main方法Android System Train Note Android Systemserver Fork.jpg


解析system_server运行的关键流程(4.4)

  • 1.system_server程序入口:SystemServer的main函数开始;
frameworks/base/services/java/com/android/server/SystemServer.java类中的main函数main函数中的关键代码:  System.loadLibrary("android_servers");  nativeInit();  ServerThread thr = new ServerThread();  thr.initAndLoop();
  • 2.调用nativeInit()
  注意:4.4之前版本中,该方法为init1,在init1函数中,会初始化SurfaceFlinger,SensorService等本地服务。  nativeInit方法里并没有初始化这些服务;  nativeInit在jni中对应的方法为:android_server_SystemServer_nativeInit  文件位置:frameworks/base/services/jni/com_android_server_SystemServer.cpp
  • 3.调用ServerThread的initAndLoop方法
  (1).创建Looper,Looper.prepareMainLooper()  (2).创建XXXThread&XXXHandler  (3).增加System Service      XXXService xxxService = new XXXService();      ServiceManager.addService("xxxService", xxxService);  (4).Service的一些初始化操作      ActivityManagerService.installSystemProviders();      ActivityManagerService.self().setWindowManager(wm);      inputManager.start();      display.setInputManager(inputManager);      wm.displayReady();  (5).核心System Service的systemReady调用      notification.systemReady();      wm.systemReady();      pm.systemReady();      display.systemReady();  (6).AMS的systemReady,Callback是运行新进程,主要启动SystemUi以及非核心System Service的systemReady的调用  (7).调用Looper.loop()进入Loop循环  总结:共7个非常关键的处理逻辑,需要我们掌握以下两点:      1. System Service如何启动      2. SystemUi如何启动


扩展system_server进程与Zygote的关系

  • 1.system_server进程的作用非常重要,承载了Android Framework层中的所有服务。
  在上面的ServerThread的initAndLoop函数里会启动很多Framework层中的服务(包括AMS,PMS,PS等)
  • 2.如果此进程异常退出或者被kill掉,Android系统的容错机制会进行怎样的处理?
  如果system_server中出现异常情况或着被kill掉,那么zygote会将自己干掉,然后安卓重启;
  • 3.system_server与Zygote的关系,不仅是Zygote的fork出的第一个子进程,而且他们的生命周期保持一致。


WatchDog主要作用

  • WatchDog主要作用:
1.接收系统内部reboot请求,重启系统2.监听核心System Service状态,防止死锁  如果核心Service出现死锁,那么WatchDog会将SystemServer进程kill掉;  当然这时候,zygote发现子进程systemServer死了,然后就悲痛欲绝的将自己给kill了,然后安卓就重启了,然后就没有然后了!
  • 核心System Service列表:
ActivityManagerServicePowerManagerServiceMountServiceNetworkManagementServiceInputManagerServiceWindowManagerService
  • WatchDog看门狗的实现原理
1.WatchDog实现了Thread,在system_server进程中启动2. WatchDog的run方法中while(true)循环判断心跳包的状态mCompleted,心跳包失败则kill当前进程,即system_server进程3.心跳包的处理逻辑:通过HeartbeatHandler定期异步发送Handler消息, Handler消息响应处发起已注册Service的监控,修改mCompleted状态4.Service增加监控   首先实现service中的monitor接口   然后通过watchdog的addmonitor方法加入监控


0 0
原创粉丝点击