2.2 控制流程分析
2.2.1 LightsService服务启动流程
LightsService是从SystemServer中启动的,在运行SystemServer的run()方法时会启动所有必须的系统服务,
这其中就包含用来控制LED灯以及屏幕背光的LightsService,在SystemServer中启动服务:
private void startBootstrapServices() {
...
// Manages LEDs and display backlight so we need it to bring up the display.
mSystemServiceManager.startService(LightsService.class);
...
}
启动时首先会运行LightsService的构造方法。构造方法如下:
public LightsService(Context context) {
super(context);
mNativePointer = init_native();
for (int i = 0; i < LightsManager.LIGHT_ID_COUNT; i++) {
mLights[i] = new LightImpl(i);
}
}
在构造方法中通过native方法init_native()给私有变量mNativePointer进行赋值,这个方法是由C++实现的,
主要任务是分配每个Light设备的空间,并返回首地址指针给mNativePointer。后续的native方法对Light设备的
操作都是根据这个指针