start app_process from init

init.rc


service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

socket zygote stream 666
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart media
onrestart restart netd

frameworks/base/cmds/app_process/app_main.cpp::main
if (0 == strcmp("--zygote", arg)) {
bool startSystemServer = (i < argc) ?
strcmp(argv[i], "--start-system-server") == 0 : false;
setArgv0(argv0, "zygote");
set_process_name("zygote");
runtime.start("com.android.internal.os.ZygoteInit",
startSystemServer);
} else {

frameworks/base/core/jni/AndroidRuntime.cpp::start
void AndroidRuntime::start(const char* className, const bool startSystemServer)
{
LOGD("\n>>>>>> AndroidRuntime START %s <<<<<<\n",
className != NULL ? className : "(unknown)");
..
JNIでcallStatic

com.android.internal.os.ZygoteInit#main


frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#main
if (argv[1].equals("true")) {
startSystemServer();
} else if (!argv[1].equals("false")) {
throw new RuntimeException(argv[0] + USAGE_STRING);
}

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java#startSystemServer


String args[] = {
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,3001,3002,3003",
"--capabilities=130104352,130104352",
"--runtime-init",
"--nice-name=system_server",
"com.android.server.SystemServer",
};
...
try {
parsedArgs = new ZygoteConnection.Arguments(args);


...
/* Request to fork the system server process */
pid = Zygote.forkSystemServer(
parsedArgs.uid, parsedArgs.gid,
parsedArgs.gids, debugFlags, null,
parsedArgs.permittedCapabilities,
parsedArgs.effectiveCapabilities);

framesorks/base/services/java/com/android/server/SystemServer.java
SystemServer#main
public static void main(String[] args) {
...
System.loadLibrary("android_servers");
init1(args); // <-- native method
}

frameworks/base/services/jni/com_android_server_SystemServer.cpp
static void android_server_SystemServer_init1(JNIEnv* env, jobject clazz)
{
system_init();
}

frameworks/base/cmds/system_server/library/system_init.cpp
system_init
Start services written in C++
- SurfaceFlinger
- SensorService
- AudioFlinger
- MediaPlayerService
- CameraService
- AudioPolicyService
callStatic by JNI com/android/server/SystemServer#init2

framesorks/base/services/java/com/android/server/SystemServer.java
public static final void init2() {
Slog.i(TAG, "Entered the Android system server!");
Thread thr = new ServerThread();
thr.setName("android.server.ServerThread");
thr.start();
}

ServerThread#run
Start services written in Java
- Entropy Service
- Power Manager
- Activity Manager
- Telephony Registry
- Package Manager
- Account Manager
- Content Manger
- System Content Providers
- Battery Service
- Lights Service
- Vibrator Service
- Alarm Manager
- Init Watchdog
- Window Manager
- Bluetooth Service
- Device Policy
- Status Bar
- Clipboard Service
- Input Method Service
- NetStat Service
- NetworkMnagement Service
- Connectivity Service
- Throttle Service
- Accessibility Manager
- Mount Service
- Notification Manager
- Device Storage Monitor
- Location Manager
- Search Service
- DropBox Service
- Wallpaper Service
- Audio Service
- Headset Observer
- Dock Observer
- USB Observer
- UI Mode Manager Service
- Backup Service
- AppWidget Service
- Recognition Service

- DiskStats Service


These services create threads as needs. All those threads are running in the System Server process.

In the normal Linux system, these services are independent process.



更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. PyTorch安装
  2. NPS内网穿透穿透
  3. <JVM中篇:字节码与类的加载篇>04-再谈类的加
  4. BitWarden密码管理器自建
  5. Docker搭建Poste.io邮箱【保姆级教程】
  6. <JVM下篇:性能监控与调优篇>01-概述篇-02-
  7. <JVM下篇:性能监控与调优篇>03-JVM监控及
  8. <JVM下篇:性能监控与调优篇>补充:浅堆深堆
  9. <JVM下篇:性能监控与调优篇>补充:使用OQL语
  10. <JVM下篇:性能监控与调优篇>04-JVM运行时