这篇文章android启动流程讲到android的启动流程,其实中间还蕴藏了SurfaceFlinger服务的内容,但没有包括进去,目的是为尽可能简单的讲述android启动流程,从整体上把握。
好吧,现在咱们就一起学习下Surface Flinger中如何启动的。
在android4.3与android4.4版本上有所不同,下面是两个版本简单的流程图
在Andoird4.4系统出现以前,Surface Flinger服务是由system server启动的。
frameworks/base/services/java/com/android/server/SystemServer.java
public class SystemServer {
<span style="white-space:pre"> </span>...
public static void main(String[] args) {
...
System.loadLibrary("android_servers");//加载库
init1(args);//调用库函数init1()
}
<span style="white-space:pre"> </span>public static final void init2() {
Slog.i(TAG, "Entered the Android system server!");
Thread thr = new ServerThread();
thr.setName("android.server.ServerThread");
thr.start();
}
}
我们看到,首先加载了android_servers的库,然后调用库里的init1()函数完成后面的工作。
小插曲:看到init2()函数没?这个函数后面会被system_init()函数调用。
继而new了一个ServerThread线程,这是非常重要,android启动流程讲到Java系统服务,就是这里被启动的。
init1()函数在下面文件实现
frameworks/base/services/jni/com_android_server_SystemServer.cpp
extern "C" int system_init();
static void android_server_SystemServer_init1(JNIEnv* env, jobject clazz)
{
system_init();//调用这个
}
/*
* JNI registration.
*/
static JNINativeMethod gMethods[] = {
/* name, signature, funcPtr */
{ "init1", "([Ljava/lang/String;)V", (void*) android_server_SystemServer_init1 },//映射到这
};
int register_android_server_Syste