Android_boot_SystemServer

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hello_java_Android/article/details/79149782
Android启动之SystemServer启动分析
SystemServer,Android服务启动:位于framework/base/service/java.com.android.server/SystemServer.java,>
~                                                                                                     |在run方法中主要进行一些初始化工作,捡着能看明白的来吧,后续补充,Zygote中将启动SystemServer组件,然后进入到SystemServer类的main方法中, 
/*** The main entry point from zygote.
public static void main(String[] args) {
        new SystemServer().run();
}
|1)初始化main looper
 // Prepare the main looper thread (this thread).
android.os.Process.setThreadPriority( android.os.Process.THREAD_PRIORITY_FOREGROUND);
android.os.Process.setCanSelfBackground(false); 
Looper.prepareMainLooper();
|2)初始化native服务
// Initialize native services.
System.loadLibrary("android_servers");
nativeInit();
|3)初始化系统Context,初始化主线程(ActivityThread),在systemMain()方法中对低内存(low-memory)设备不使用硬件加速。
// Initialize the system context.
createSystemContext();
private void createSystemContext() {
ActivityThread activityThread = ActivityThread.systemMain();
mSystemContext = activityThread.getSystemContext();
mSystemContext.setTheme(android.R.style.Theme_DeviceDefault_Light_DarkActionBar);
}
|4)创建系统的ServiceManager,大名鼎鼎的系统服务大管家。
// Create the system service manager.
mSystemServiceManager = new SystemServiceManager(mSystemContext);
LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
|5)启动服务:
// Start services.
try {
startBootstrapServices();
startCoreServices();
startOtherServices();
} catch (Throwable ex) {
Slog.e("System", "******************************************");
Slog.e("System", "************ Failure starting system services", ex);
/// M: RecoveryManagerService  @{
if (mRecoveryManagerService != null && ex instanceof RuntimeException) {
mRecoveryManagerService.handleException((RuntimeException)ex, true);
}
/// @}
}
6)最后,开启looper循环
// Loop forever.
        Looper.loop();


我们看到在SystemServer的run方法中主要是启动一些服务,主线程和looper的初始化等操作,分析道这里我们只是知道在这里开启了相关的服务,但是具体是哪些服务呢?注意到有这段代码:
// Start services.
        try {
            startBootstrapServices();
            startCoreServices();
            startOtherServices();
        } catch (Throwable ex) {
            Slog.e("System", "******************************************");
            Slog.e("System", "************ Failure starting system services", ex);
            /// M: RecoveryManagerService  
            if (mRecoveryManagerService != null && ex instanceof RuntimeException) {
                mRecoveryManagerService.handleException((RuntimeException)ex, true);
            }
            /// @}
        }
这里有三个方法startBootstrapServices、startCoreServices和startOtherServices,分别来看下这三个方法都开启了哪些服务,
tartBootstrapServices():
com.android.server.pm.Installer:提供安装、卸载App等服务
com.android.server.am.ActivityServiceManager:提供Activity等组件的管理的服务,这个比较复杂暂且再挖个坑。
com.android.server.power.PowerManagerService:电源管理的服务。
com.android.server.lights.LightsService:LED管理和背光显示的服务。
com.android.server.display.DisplayManagerService:提供显示的生命周期管理,根据物理显示设备当前的情况决定显示配置,在状态改变时发送通知给系统和应用等服务。
com.android.server.pm.PackageManagerService:管理所有的.apk。
com.android.server.pm.UserManagerService:提供用户相关服务。
通过startSensorService()本地方法启动Sensor服务。
startCoreServices();
com.android.server.BatteryService:电量服务,需要LightService。
com.android.server.usage.UsageStatsService:提供收集统计应用程序数据使用状态的服务。
com.android.server.webkit.WebViewUpdateService:私有的服务(@hide),用于WebView的更新。
startOtherServices();
com.android.server.accounts.AccountManagerService:提供所有账号、密码、认证管理等等的服务。
com.android.server.content.ContentService:用户数据同步的服务。
com.android.server.VibratorService:震动服务。
IAlarmManager:提醒服务。
android.os.storage.IMountService:存储管理服务。
com.android.server.NetworkManagementService:系统网络连接管理服务。
com.android.server.net.NetworkStatsService:收集统计详细的网络数据服务。
com.android.server.net.NetworkPolicyManagerService:提供低网络策略规则管理服务。
com.android.server.ConnectivityService:提供数据连接服务。
com.android.server.NetworkScoreService:android.net.NetworkScoreManager的备份服务。
com.android.server.NsdService:网络发现服务(Network Service Discovery Service)。
com.android.server.wm.WindowManagerService:窗口管理服务。
com.android.server.usb.UsbService:USB服务。
com.android.server.SerialService:串口服务。
com.android.server.NetworkTimeUpdateService:网络时间同步服务。
com.android.server.CommonTimeManagementService:管理本地常见的时间配置的服务,当网络配置变化时会重新配置本地服务。
com.android.server.input.InputManagerService:事件传递分发服务。
com.android.server.TelephonyRegistry:提供电话注册管理的服务。
com.android.server.ConsumerIrService:远程控制服务。
com.android.server.audio.AudioService:音量、铃声、声道等管理服务。
com.android.server.MmsServiceBroker:MmsService的代理,因为MmsService运行在电话进程中,可能随时crash,它会通过一个connection与MmsService建立一个桥梁,MmsService实现了公开的SMS/MMS的API。
TelecomLoaderService
CameraService
AlarmManagerService
BluetoothService
等。。。







































猜你喜欢

转载自blog.csdn.net/hello_java_Android/article/details/79149782