SurfaceFlinger是Android图像渲染的一个非常重要的模块。
文章目录
Android 系统启动流程
我们都知道,Android源自于Linux系统,由bootloader载入linux内核,从Linux内核Kernal启动init进程,解析init.rc文件。
创建Zygote进程:Android世界的开始。启动SystemServer进程,接收着其他进程请求创建负责fork新的子进程。
创建Service_Manager进程:Binder通信过程中的守护进程,本身也是一个Binder服务,提供了查询和注册binder服务。
创建SurfaceFlinger进程:负责接受多个进程来源的图像数据,合成并发送到显示设备。
…
Window创建过程
我们创建一个activity也会创建window,他是所有的view的载体。
在Activity的启动过程中,当Zygote 创建了一个新的进程之后执行了ActivityThread的main(),将走到ActivityThread的performLaunchActivity()。
// ActivityThread.java
private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
activity = mInstrumentation.newActivity(cl, component.getClassName(), r.intent);
Application app = r.packageInfo.makeApplication(false, mInstrumentation);
// 1. 创建window
activity.attach(...);
// 2. 调用oncreate()
mInstrumentation.callActivityOnCreate(activity, r.state);
}
1.创建window
performLaunchActivity反射实例化activity和创建Application。
调用了activity.attach()函数,内部创建了一个PhoneWindow
// Activity.java
final void attach(...) {
mWindow = new PhoneWindow(this);
// 3. 创建并设置WindowManager
mWindow.setWindowManager(...);
}
2.setContentView()初始化DecorView
// Instrumentation.java
public void callActivityOnCreate(Activity activity, Bundle icicle) {
prePerformCreate(activity);
activity.performCreate(icicle);
postPerformCreate(activity);
}
// Activity.java
final void performCreate(Bundle icicle) {
onCreate(icicle);
...
}
往往我们都在会onCreate()中调用Activity的setContentView(),加载对应的布局文件。
// Activity.java
public void setContentView(@LayoutRes int layoutResID) {