Android 开发基础 Thread-safe methods
2010-07-15 21:18:00 来源:WEB开发网在某些情况下,你执行的 方法可以被超过一个线程调用,因此必须被写成线程安全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
- ››Android 当修改一些代码时,使用什么编译命令可以最...
- ››Android 如何添加一个apk使模拟器和真机都编译进去...
- ››Android 修改Camera拍照的默认保存路径
- ››Android 如何修改默认输入法
- ››android开发中finish()和System.exit(0)的区别
- ››Android手势识别简单封装类
- ››android中查看项目数字证书的两种方法
- ››Android中获取IMEI码的办法
- ››android 相机报错 setParameters failed
- ››Android重启运用程序的代码
- ››Android为ListView的Item设置不同的布局
- ››android bitmap与base64字符串的互相转换
更多精彩
赞助商链接