本文转摘自:http://www.eoeandroid.com/thread-71763-1-2.html
一、进程(Processes)
1.应用程序运行的时候,Android会为其开启一个Linux进程,其中含有一个单独的执行线程。然而你还可以将其安排进其他进程里或是在其他进程中产生额外的线程。
2.Manifest文件控制着组件运行在哪个进程当中。这四个标签都含有“process”属性,它用来指定这个组件运行在哪个进程里。
3.process属性的功能:
(1)组件运行在各自的进程中。
(2)一些组件共享着一个进程。
(3)不同应用程序中的组件运行在相同的进程中(它们共享同一个Linux用户ID和权限)。
(4)另外标签也有个process属性,默认时:在指定进程中应用所有组件。
4.所有的组件是在指定进程中的主线程创建,也就是说当系统调用这些组件时,会去那个线程里面寻找。由于所有方法调用都在那主个线程中,难免会出现阻塞的情况(复杂的循环计算),所以开发人员可以创建额外的线程以避免这情况的发生。
5.有两种情况,Android需要强制关闭一个进程:
(1)内存不足。
(2)其他的进程需要更多的内存以响应用户需求。
6.强制关闭进程的简单原理:Android会衡量哪些进程对当前用户比较重要,以关闭那些不重要的进程。举例来说,Android更乐意关闭掉那些不在屏幕上显示的进程。因此,得出一个结论就是,这一行为取决于组件在那个进程中的状态。
二、线程(Threads)
1.用户界面应当是迅速地响应用户操作为目的,对于那些不能迅速完成的操作放进其它线程里面去工作。比如说下载功能,可以放置到后台去嘛。
2.当然,还是利用JDK中的Thread对象去创建线程,而且Android已然提供为开发人员提供好了极为便利的API用以管理线程。
三、远程方法调用(Remote procedure calls)
1.Android提供了一个轻量级的机制——远程方法调用(RPCs),即:在本地方调用方法,却在远程方(其它的进程)执行它,并且将结果返回给本地。
2.调用原理:首先在本地方将这个方法调用和其携带的数据分解出来,然后从本地方进程和地址空间传输到远程方进程和地址空间;远程方会重新组装和制定方法调用;返回值则是由远程方传输回到本地方。
3.RPC接口里面的方法都是同步的,也就是说,只有远程方法执行完毕之后(如果方法没有返回值亦如此),本地调用的方法才会结束。
四、线程安全的方法(Thread-safe methods)
1.当某个方法有可能同时在不同线程中被调用,那么开发人员就需要让这个方法改成线程安全的(比如RPCs)。
2.Content provider会接收来自不同进程产生的数据请求。详细点说就是这么回事,尽管ContentResolver和ContentProvider这两个类隐藏了关于内部线程通信是如何被管理的信息,但是ContentProvider中的那些方法(也就是响应那些数据请求的方法):query()、 insert()、delete()、update()和getType(),这些方法都是在context provider所处进程的线程池中被调用的,而不是在主进程中。换句话说,它们有可能在同一时刻不同线程中调用这些方法,所以它们必须要在线程安全的情况下执行。