0

我有一个启动类型和绑定类型的服务(定义在这里)。它开始无限期地运行,然后一个单独的应用程序绑定到它:当这个应用程序被销毁时,它调用它的unbindServiceononDestroy方法。

该服务应检测到此应用程序已完成。我读到了onUnbind方法,当所有客户端都从服务发布的特定接口断开连接时调用该方法。但是,我不需要知道所有客户端何时断开连接,而是任何断开连接。是否可以?

我认为,在关闭期间(在onDestroy方法内部),应用程序可以向服务发送消息(利用服务已绑定的事实):稍后它应该调用该unbindService方法,如下所示。

// method of the application
@Override
public void onDestroy() {
    super.onDestroy();
    service.closed();   // service is defined by IService.aidl
    unbindService(...);
}

这样,应用程序会将最后一条消息发送到服务(service.closed()方法),然后取消绑定服务。它可以正常工作吗?service.closed()当消息到达其目的地时该方法是否返回?或者是否存在由于下一次调用方法而导致消息未传递的风险unbindService

4

1 回答 1

2

是否可以?

让活动Binder在取消绑定之前调用一个方法,以指示它正在断开连接。

它可以正常工作吗?

它应该。AIDL 调用是同步的,因此在您的示例中使用 , 调用unbindService()之后才会发生。Binderclosed()

于 2012-04-29T18:14:57.417 回答