Android 应用进程启动流程

发布时间:2024-03-18 11:06:19 浏览:324

阅读的收益

讨论的内容也就是一个应用进程是如何启动的,私以为这一部分的内容颇为重要,即便不了解细节,也要知道其中的大体步骤。特别是针对我们应用开发者而言,理应了解我们的 App 是如何被启动的,App 中的组件是如何被系统服务调用和组织的。

讲应用进程启动的文章不是很多,也都没有说到点上,大抵都是对源码的堆叠,没有个人的理解在里面。如果非要看调用栈的话,在合适的地方挂上断点,或者通过输出异常栈的方式都可以看到,如下图所示。,但感觉还是没有说到点子上,因而这篇文章只做到抛砖引玉的作用,希望有更好的文章出现。细节是复杂的,原理是简单的,这里尽可能地从原理角度出发进行说明,加深大家的理解。

对这篇文章阅读后,你能了解从用户点击 Launcher 上的 App 图标,到显示出 App 界面时主要发生的事情,而通过对这个一过程的了解,将知晓以下知识点。

  • Android Process 的创建过程,以及 Activity Manager Service 是如何参与这个步骤,以及在其中扮演的角色?
  • Android 中所谓的主线程是怎么回事?主线程是谁?又如何被创建的。


  • Android 系统是如何节省进程创建开销的?
  • 应用进程简介

    在 Android 中每一个应用程序都被设计为单独的进程,应用程序也可以根据自己的需要去决定是否需要启用多个进程,不过总而言之都与其他应用程序和系统服务是相互独立的。从解耦和系统稳定性的角度上看都应该运行在不同的进程上,毕竟不能因为应用程序的崩溃就影响到其他应用进程或者系统服务进程。

    应用进程不同于其他 Android 系统中的守护进程,当内存不够的时候,某些应用进程可能会被系统回收掉,因而应用进程也是有其生命周期的,更多信息参考 Android 应用组件不一定要运行在单独的进程上,也可以运行在多个进程上,通过对 Android 组件指定运行的进程 android:process,即可让其运行在其他线程上。

    每个应用进程都相当于一个 Sandbox 沙箱,Android 通过对每一个应用分配一个 UID,注意这里的 UID 不同于 Linux 系统的 User ID,可以将每个应用理解为一个 User
    ,只能对其目录下的内容具有访问和读写权限,这样就从根源上保护了其他应用程序,下图说明了其隔离效果。

    App Process Isolate