Android正常开机流程

Android正常开机流程

Android正常开机首先从arm9侧开始,进而转到arm11侧。具体的开机流程如下。

1               启动Bootloader

 

2               内核kernel

由BootLoader开启

 

3               Init

由内核启动,会按照init.rc中配置的内容进行初始化工作。

Init最后会启动zygote,进入zygoteinit.java的main方法。

 

4               Zygote

在zygote的main方法中主要进行的操作包括建立socket连接registerZygoteSocket()、类的预加载preloadClasses()、资源的预加载preloadResources()等操作。

 

4.1  preloadClasses()

程序会先找到名为preloaded-calsses的文件,该文件位于framework.jar里,里面的配置文件中每一行都记载了一个要加载的类,程序会通过流的方式逐行读取文件,并通过Class.forName()的方式对每一个类进行加载,并计数,最后会打印出统计log。

 

4.2  preloadResources()

在preloadResources()中加载资源,包括drawable和color的,最后也会打出统计log。

 

在加载完资源之后,程序会调用startSystemServer()为调用systemserver类做一些准备。然后会通过system_init.cpp走到systemserver.java中继续执行。

 

 

5               SystemServer

5.1 SystemServer类中的操作

zygote会调用systemserver类main方法,main中会调用该类的init1方法,init1方法中会在底层作一些启动服务的处理。(SurfaceFlinger, AudioFlinger, etc..).

然后init1方法再调用init2方法,通过init2方法来启动android的service。

在init2方法中会启动并执行一个serverthread的线程,然后程序进入serverthread的run方法。接下来进行在run方法中的操作。

5.2  ServerThread中的操作

1。判断上一次是否正常关机,如果不是(failed to shut down)则会马上执行关机操作,如果正常的话则开始启动服务。

2。启动Entropy Service

3。 启动Power Manager

4。启动Activity Manager

期间会寻找bootanimation.zip文件,执行开启动画的操作。这里的开机动画指的是android几个字闪烁的界面。

5。启动Telephony Registry

6。启动Package Manager

7。启动Account Manager

8。启动Content Manager

9。启动System Content Providers

10。启动Battery Service

11。启动Lights Service

12。启动Vibrator Service

13。 启动Alarm Manager

14。启动Init Watchdog

15。启动Window Manager

16. 启动Bluetooth Service(期间会进行判断,如果是在模拟器的情况下会跳过此步骤:Skip Bluetooth if we have an emulator kernel)

17.启动 Device Policy

18.启动Status Bar

19.启动Clipboard Service

20。启动Input Method Service

21。启动NetStat Service

22。启动NetworkManagement Service

23。启动Connectivity Service

24。启动Throttle Service

25。启动Accessibility Manager

26。启动Mount Service

27。启动Notification Manager

28。启动Device Storage Monitor

29。启动Location Manager

30。启动Search Service

31。启动DropBox Service

32。启动Wallpaper Service

33。启动Audio Service

34。启动Headset Observer

35。启动Dock Observer

36。启动UI Mode Manager Service

37。启动Backup Service

38。启动AppWidget Service

39。Recognition Service

40。启动DiskStats Service

 

41。确保ADB_ENABLED设置值同secure property的值相匹配(make sure the ADB_ENABLED setting value matches the secure property value)

42。register observer to listen for settings changes

43。判断是否是安全模式(safemode),并做相应的处理。

 

在各个服务都启动之后,开始执行app process,通过调用xxx.systemready()方法,通知各个服务已经就绪。

44。执行devicePolicy.systemReady()

45。执行notification.systemReady()

46。执行statusBar.systemReady()

47。执行Windowmanagerservice.systemReady()

在该方法中会调用到phonewindowmanager的systemReady(),然后调用doKeyGuard(),会开启锁屏计时器。也就是关联到刚开机时进入的锁屏界面。

48。执行Powermanagerservice.systemReady

49. 执行packagemanager.systemready

50.调用ActivityManagerservice.systemReady(new Runnable()),传入一个线程参数,

在ActivityManagerservice里面会调用startProcessLocked(),然后attachApplicationLocked()。

51。启动作为参数传入给ActivityManagerservice.systemReady的线程,调用其他系统app的systemready。(包括StatusBarManagerService、BatteryService、ConnectivityService、DockObserver、UsbObserver、ThrottleService、UiModeManagerService、AppWidgetService、WallpaperManagerService、InputMethodManagerService、RecognitionManagerService、 LocationManagerService)

52. 在ActivityManagerservice的systemready()中通过resumeTopActivityLocked()调用startHomeActivityLocked函数来启动launcher.

53。最后在activitymanager里发送ACTION_BOOT_COMPLETED的intent,第三方程序在接收此广播后开始启动。


你可能感兴趣的:(Android正常开机流程)