不知怎的,我发现这令人困惑:
如果您的活动和绑定服务在同一进程中运行,并且您希望在活动和绑定服务(使用通知设置为前台)之间异步通信,那么如何在两端使用处理程序?我不理解的部分是活动端和服务端都在同一个线程中运行:UI线程。这意味着同一个HANDLER!
我曾经这样编程:在我的绑定服务中,我创建一个Handler,将该处理程序放入Messenger中,在onBind()方法中返回Messenger。在活动端,我使用onServiceConnected()和onServiceDisconnected()创建一个ServiceConnection对象。我还创建了一个客户端Handler并将其放在客户端Messenger对象中。我还定义了一个服务Messenger对象,它获取在ServiceConnection对象的onServiceConnected()方法中分发的Messenger对象。现在一切都准备好了。
我相信我可以删除活动和服务之间的整个Messenger部分,并且只使用本地绑定器对象(因为活动和服务在同一个ui线程上运行)。这样你只有双方的一个线程和两个处理程序和两个信使。为什么在同一个线程中有两个处理程序/信使?这是获得异步通信的唯一方法吗?我不想直接从活动中调用服务中的方法(正如您通常使用本地Binder对象那样),因为这是同步通信!