Android开发 APP进程启动原理

1、)首先Android系统启动的时候会启动一个应用程序管理服务PackageManagerService,这个服务主要是由SystemServer组件启动的,同时还有ActivityManagerService服务。不过通过源码你会发现在ActivityManagerService的构造函数中也初始化了BroadcastQueue、ProviderMap、ActiveServices、ActivityStackSupervisor,相信大家都已经猜出来了不错这个服务就是用来管理Android四大组件的,而PackageManagerService服务是用来解析Apk的,其实主要解析的是AndroidManifest.xml文件,得到应用程序相关信息(如:Activity、Service、BroadcastReceiver和Content Provider等),完成应用程序的安装过程。如果我们想要在Android桌面上看到这些应用程序,还需要有一个Home应用程序,负责从PackageManagerService服务中把这些安装好的应用程序取出来,并以友好的方式在桌面上展现出来,例如以快捷图标的形式。在Android系统中,负责把系统中已经安装的应用程序在桌面中展现出来的Home应用程序就是Launcher了。

2、)桌面上icon图标(快捷图标)应用程序都是以Launcher(DEFAULT默认、HOME、PREFERENCE、LAUNCHER、BROWSABLE浏览器、GADGET内嵌非桌面)管理并启动App的,点击桌面icon图标触发Launcher的onItemClick事件,通知ActivityMangerService(所有Activity管家)启动当前程序的MainActivity(通过当前应用程序包名+当前标识位主Launcher位置Activity)。如果属于未启动状态,那么通知为该程序创建一个进程(uid + process属性组合),通过Process.start()导入android.app.ActivityThread类,并且执行它的main函数:

1、在该进程main函数中先创建并绑定Looper对象;

2、然后创建ActivityThread实例调用它的attach函数启动ActivityMangerService调用attachApplication传递参数ApplicationThread类型的Binder对象(mAppThread)进程间通信进入ApplicationThread进程创建Application,然后ApplicationThread调度scheduleLaunchActivity也就是MainActivity,接着使用Handler消息机制启动Activity调度attach方法创建PhoneWindow、parentContent(即DecorView)根容器以及调用onCreate方法setContentView通过源码分析即parentContent.addView,接着ApplicationThread调度scheduleResumeActivity也就是MainActivity的onResume生命周期还是通过Handler消息机制启动把跟容器添加到窗口上wm.addView(parentView,1)窗口本身有一个RootView接着根View开始调用requestLayout从而调度performTraversals(执行遍历一次performMeasure、performLayout、performDraw也就是View控制层测量,布局,绘制)接下来的生命周期也就依次执行了;

3、进入loop消息循环了。

你可能感兴趣的:(Android)