WEB开发网
开发学院手机开发Android 开发 Android 开发基础 Thread-safe methods 阅读

Android 开发基础 Thread-safe methods

 2010-07-15 21:18:00 来源:WEB开发网   
核心提示:在某些情况下,你执行的 方法可以被超过一个线程调用,Android 开发基础 Thread-safe methods,因此必须被写成线程安全thread-safe,首先来说,而不是进程的主线程,由于这些方法可以被任意多线程同时调用,这一点对于可以远程调用的方法来说都是正确的——就像上一节所说的RPC机制一样,当一个IB

在某些情况下,你执行的 方法可以被超过一个线程调用,因此必须被写成线程安全thread-safe。

首先来说,这一点对于可以远程调用的方法来说都是正确的——就像上一节所说的RPC机制一样。当一个IBinder对象执行的方法的调用开始在 IBinder的同一个进程中时,此方法是在调用者的线程中运行的。但是,当该调用起始在另外一个进程时,该方法是在Android维护的一个与 IBinder处于相同进程中的线程池中的一个线程中调用的;它不是在进程的主线程中调用的。例如,一个service的onBind()方法会被该 service的进程中的主线程调用,使用onBind()返回的对象实现的方法(例如,一个执行RPC方法的Stub子类)将被从池中的线程调用。由于 service可以有超过一个的client,超过一个的线程池线程可以同时处理相同的IBinder方法。因此IBinder方法必须被实现为线程安全的。

类似的,一个content provider可以接收另一个进程中的请求。虽然ContentResolver和ContentProvider隐藏了进程间通信的细节,ContentProvider响应请求的方法——query(),insert(),delete(),update()以及getType() ——是从content provider进程的线程池中运行的,而不是进程的主线程。由于这些方法可以被任意多线程同时调用,因此它们也需要被实现为线程安全的。

原文

Thread-safe methods

In a few contexts, the methods you implement may be called from more than one thread, and therefore must be written to be thread-safe.

This is primarily true for methods that can be called remotely — as in the RPC mechanism discussed in the previous section. When a call on a method implemented in an IBinder object originates in the same process as the IBinder, the method is executed in the caller’s thread. However, when the call originates in another process, the method is executed in a thread chosen from a pool of threads that Android maintains in the same process as the IBinder; it’s not executed in the main thread of the process. For example, whereas a service’s onBind() method would be called from the main thread of the service’s process, methods implemented in the object that onBind() returns (for example, a Stub

1 2  下一页

Tags:Android 开发 基础

编辑录入:coldstar [复制链接] [打 印]
赞助商链接