Android正常开机流程

Android正常开机流程java

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

1               启动Bootloader

 

2               内核kernel

由BootLoader开启安全

 

3               Init

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

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

 

4               Zygote

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

 

4.1  preloadClasses()

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

 

4.2  preloadResources()

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

 

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

 

 

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,第三方程序在接收此广播后开始启动。

相关文章
相关标签/搜索