进程
在Android里,进程完全是应用的实现细节,而不是用户通常了解的那样。其主要用途就是:
通过安置不受信任的或不稳定的代码到另一个进程来提高稳定性或安全性。
通过在同一进程里运行多个.apks的代码来减少开销。
通过把重量级代码放在单独的进程中来帮助系统管理资源,该进程可以在不影响应用程序其他部分的情况下被终止。
正如前面所述,这个进程属性用来控制运行着特定应用程序组件的进程,注意,此属性不能用于违反系统安全性:如果有两个不共享相同用户ID的.apks尝试运行在同一进程中,这将不会被允许,相反会为它们每一个创建不同的进程。
线程
每个进程包含一个或多个线程。多数情况下,Android避免在进程里创建额外的线程,以保持应用程序单线程,除非它创建自己的线程。一个重要的结果就是所有对活动Activity,广播接收器BroadcastReceiver以及服务Service实例的调用都是由这个进程的主线程创建的。
注意新的线程并不会为每个活动,广播接收器,服务或者内容提供器(ContentProvider)实例而创建:这些应用程序的组件在进程里被实例化(除非另有说明,都在同一个进程处理),实际上是进程的主线程。这说明当被系统调用时没有哪个组件(包括服务)会进行远程或者阻塞操作(就像网络调用或者计算循环),因为这将阻止进程中的所有其他组件。你可以使用标准的线程类Thread或者Android的HandlerThread便捷类去对其它线程执行远程操作。
这里有一些关于这个线程规则的重要的例外:
对IBinder或者IBinder实现的接口的调用由调用线程或本地进程的线程池(如果该呼叫来自其他进程)分发,而不是它们的进程的主线程。特殊情况下,一个服务的IBinder可以这样调用。(尽管调用服务里的方法已经在主线程里完成。)这意味着IBinder接口的实现必须要有一种线程安全的方法,这样任意线程才能同时访问它。
对ContentProvider主要方法的调用由调用线程或者主线程分发,如同IBinder一样。被指定的方法在内容提供器的类里有记录。这意味着实现这些方法必须要有一种线程安全的模式,这样任意其它线程可以同时访问它。
视图及其子类中的调用由正在运行着视图的线程产生。通常情况下,这会被作为进程的主线程,如果你创建一个线程并显示一个窗口,那么继承的窗口视图将从那个线程里启动。
本帖最近评分记录: 共 条评分 隐藏
在Android里,进程完全是应用的实现细节,而不是用户通常了解的那样。其主要用途就是:
通过安置不受信任的或不稳定的代码到另一个进程来提高稳定性或安全性。
通过在同一进程里运行多个.apks的代码来减少开销。
通过把重量级代码放在单独的进程中来帮助系统管理资源,该进程可以在不影响应用程序其他部分的情况下被终止。
正如前面所述,这个进程属性用来控制运行着特定应用程序组件的进程,注意,此属性不能用于违反系统安全性:如果有两个不共享相同用户ID的.apks尝试运行在同一进程中,这将不会被允许,相反会为它们每一个创建不同的进程。
线程
每个进程包含一个或多个线程。多数情况下,Android避免在进程里创建额外的线程,以保持应用程序单线程,除非它创建自己的线程。一个重要的结果就是所有对活动Activity,广播接收器BroadcastReceiver以及服务Service实例的调用都是由这个进程的主线程创建的。
注意新的线程并不会为每个活动,广播接收器,服务或者内容提供器(ContentProvider)实例而创建:这些应用程序的组件在进程里被实例化(除非另有说明,都在同一个进程处理),实际上是进程的主线程。这说明当被系统调用时没有哪个组件(包括服务)会进行远程或者阻塞操作(就像网络调用或者计算循环),因为这将阻止进程中的所有其他组件。你可以使用标准的线程类Thread或者Android的HandlerThread便捷类去对其它线程执行远程操作。
这里有一些关于这个线程规则的重要的例外:
对IBinder或者IBinder实现的接口的调用由调用线程或本地进程的线程池(如果该呼叫来自其他进程)分发,而不是它们的进程的主线程。特殊情况下,一个服务的IBinder可以这样调用。(尽管调用服务里的方法已经在主线程里完成。)这意味着IBinder接口的实现必须要有一种线程安全的方法,这样任意线程才能同时访问它。
对ContentProvider主要方法的调用由调用线程或者主线程分发,如同IBinder一样。被指定的方法在内容提供器的类里有记录。这意味着实现这些方法必须要有一种线程安全的模式,这样任意其它线程可以同时访问它。
视图及其子类中的调用由正在运行着视图的线程产生。通常情况下,这会被作为进程的主线程,如果你创建一个线程并显示一个窗口,那么继承的窗口视图将从那个线程里启动。
本帖最近评分记录: 共 条评分 隐藏