Android进程和线程
1. 前言
进程是程序的一个运行实例,以区别于“程序”这一静态的概念;而线程则是CPU调度的基本单位。当前大部分的操作系统都支持多任务运行,这一特性让用户感到计算机好像可以是同时处理很多事情。在只有一个CPU核心的情况下,这种“同时”是一种假象。它是操作系统可以采用分时的方法,为正在运行的多个任务分配合理的、单独的时间片来实现的。举一个例子:假设当前系统中有5个任务,如果采用平均分配的方法分配时间片为10ms的话,那么各个任务每隔40ms就能被执行一次,好像在同步运行一样。
一个应用程序的主入口一般都是main函数,main函数的主要工作也是千篇一律的:
- 初始化:比如windows环境下通常要创建窗口,向系统申请资源等;
- 进入死循环:在循环中处理各种事件,直到进程退出。
同一个程序包里的不同Activity默认都处于同一个进程中。Android还提供了特殊的方式让不是同一个包里的组件也可以运行于相同的进程中,优势就是,它们可以非常方便地进行资源共享,而不用经过费时费力的进程间通信。分为两种情况:
- 针对于个别组件:可以在 AndroidManifest.xml 文件中的Activity、Service、receiver、provider的标签中加入android:process属性来表明这一组件想要运行在哪个进程空间中。
- 针对整个程序包:可以直接在Application标签中加入android:process属性来指明想要依存的进程环境。
2. 总结
- 四大组件并不是程序(进程)的全部,而只是它的组成部分。
- 应用程序启动后,将创建ActivityThread主线程。
- 同一个包中的组件将运行在相同的进程空间中。
- 一个Activity应用启动后至少会有3个线程:一个主线程和两个Binder线程。