Linux进程
- 进程概述
进程是程序的一个执行实例,正在执行的 程序 等。在内核的观点看,进程是承担 分配系统资源(CPU时间,内存)的实体 。
程序 : 存储在磁盘上的一堆指令。
进程 : 将程序动态的运行起来,就转成进程,(即程序的执行过程)过程: 包含进程的创建,进程的运行以及进程消亡 。
- Linux进程结构
Linux 系统是一个多进程的系统,它的进程之间具有互不干扰等行性、特点。也就是说,进程之间是分离的任务,拥有各自的权利和责任。其中,每个进程都运行在各自独立的虚拟地址 空间,因此,即使一个进程发生了异常,它也不会影响到系统的其他进程。
App启动过程
提到App启动,其实作为应用层开发人员来说,一般很少会关注,更多的可能是为面试准备。那么,今天我们就详细梳理一下App的启动流程,理解了App的启动流程,有助于以后我们对app做一些启动优化等。流程图如下:

App启动图
整个Android系统是基于Linux的,所以我们一个App的打开与关闭过程,可以简单理解成就是一个进程的创建到销毁的过程。
整体可以分为三个步骤:
一 . 创建过程
- 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;
- system_server进程接收到请求后,向zygote进程发送创建进程的请求;
- Zygote进程fork出新的子进程,即App进程;
二. 绑定Application
上面创建进程后,执行ActivityThread.main()方法,随后调用attach()方法。
将进程和指定的Application绑定起来。这个是通过上节的ActivityThread对象中调用bindApplication()方法完成的。该方法发送一个BIND_APPLICATION的消息到消息队列中, 最终通过handleBindApplication()方法处理该消息. 然后调用makeApplication()方法来加载App的classes到内存中。
三. 显示Activity界面
经过前两个步骤之后, 系统已经拥有了该application的进程。 后面的调用顺序就是普通的从一个已经存在的进程中启动一个新进程的activity了。
实际调用方法是realStartActivity(), 它会调用application线程对象中的scheduleLaunchActivity()发送一个LAUNCH_ACTIVITY消息到消息队列中, 通过 handleLaunchActivity()来处理该消息。在 handleLaunchActivity()通过performLaunchActiivty()方法回调Activity的onCreate()方法和onStart()方法,然后通过handleResumeActivity()方法,回调Activity的onResume()方法,最终显示Activity界面。