深入理解Android 5 源代码
上QQ阅读APP看书,第一时间看更新

1.4 进程和线程

Android系统中也有进程和线程,代表当前系统中正在运行的程序。当第一次运行某个组件的时候,Android会启动一个进程。在默认情况下,所有的组件和程序运行在这个进程和线程中,也可以安排组件在其他的进程或者线程中运行。在本节的内容中,简要讲解Android进程和线程的基本知识。

1.4.1 什么是进程

组件运行的进程由manifest file控制的。组件的节点一般都包含一个process属性,例如<activity>、<service>、<receiver>和<provider>节点。属性process可以设置组件运行的进程,可以配置组件在一个独立进程中运行,或者多个组件在同一个进程中运行,甚至可以多个程序在一个进程中运行,当然,前提是这些程序共享一个User ID并给定同样的权限。另外,<application>节点也包含了process属性,用来设置程序中所有组件的默认进程。

当更加常用的进程无法获取足够内存时,Android会智能地关闭不常用的进程。当下次启动程序时会重新启动这些进程。当决定哪个进程需要被关闭时,Android会考虑哪个对用户更加有用。例如Android会倾向于关闭一个长期不显示在界面的进程来支持一个经常显示在界面的进程。是否关闭一个进程决定于组件在进程中的状态。

1.4.2 什么是线程

当用户界面需要很快对用户进行响应,就需要将一些费时的操作,如网络连接、下载或者非常占用服务器时间的操作等放到其他线程。也就是说,即使为组件分配了不同的进程,有时候也需要再分配线程。

线程是通过Java的标准对象Thread来创建的,在Android中提供了如下管理线程的方法。

(1)Looper在线程中运行一个消息循环。

(2)Handler传递一个消息。

(3)HandlerThread创建一个带有消息循环的线程。

(4)Android让一个应用程序在单独的线程中,指导它创建自己的线程。

(5)应用程序组件(Activity、Service、Broadcast Receiver)所有都在理想的主线程中实例化。

(6)没有一个组件应该执行长时间或是阻塞操作(如网络呼叫或是计算循环)当被系统调用时,这将中断所有在该进程的其他组件。

(7)可以创建一个新的线程来执行长期操作。