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. Android(安卓)加载大图片,不压缩图片
  2. Android性能分析工具Systrace和TraceView
  3. Android(安卓)Emulator 2.0更新方法
  4. Android(安卓)ExpandableListActivity实
  5. 【转】【Android】开源项目汇总-备用
  6. RxJava学习笔记(Schedulers)
  7. Android(安卓)string-array简单使用
  8. Android类似于滚动的通知栏实现
  9. Android(安卓)6.0添加自定义铃声
  10. Android(安卓)EventLog简介