Android正常开机流程

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

1启动Bootloader

2内核kernel

由BootLoader开启

3Init

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

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

4Zygote

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

4.1preloadClasses()

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

4.2preloadResources()

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

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

5SystemServer

5.1 SystemServer类中的操作

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

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

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

5.2ServerThread中的操作

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


更多相关文章

  1. Android软键盘弹出时把布局顶上去的解决方法
  2. Android drawArc方法介绍
  3. Android应用程序永久获取root权限方法
  4. Android4.0和Android4.1全屏方法
  5. Android SDK更新失败的解决方法
  6. 关于 android 输入法 adjustPan无效的解决方法
  7. Android实现EditText控件禁止输入内容的方法(附测试demo)

随机推荐

  1. Android启动系统自带的程序组件
  2. 表白程序源码,android
  3. Android软件安全与逆向分析入门-壹-初识
  4. Android自动化与持续集成实践
  5. OkHttp使用post请求注意点
  6. [置顶] Android 使用Hprose 调用Https接
  7. Android:基于ibeacon实现蓝牙考勤
  8. Android 打开网络设置页面
  9. Android窗口管理服务WindowManagerServic
  10. android播放MP3一个警告:IllegalStateExce