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