我有启动和绑定类型的服务(定义为here)。它开始无限期运行,然后一个单独的应用程序绑定到它:当该应用程序被销毁时,它会调用unbindService
方法上的onDestroy
。
服务应检测到此应用程序已完成。我读到了onUnbind方法,当所有客户端与服务发布的特定接口断开连接时,被调用。但是,我不需要知道所有客户端何时断开连接,但任何断开连接。有可能吗?
我认为,在关闭期间(在onDestroy
方法内),应用程序可以向服务发送消息(利用服务绑定的事实):稍后它应该调用{{1方法,如下。
unbindService
通过这种方式,应用程序会将最后一条消息发送到服务(// method of the application
@Override
public void onDestroy() {
super.onDestroy();
service.closed(); // service is defined by IService.aidl
unbindService(...);
}
方法),然后解除绑定服务。它可以正常工作吗?当消息到达目的地时,service.closed()
方法是否返回?或者由于下一次调用service.closed()
方法而导致邮件无法传递?
答案 0 :(得分:2)
有可能吗?
让活动在解除绑定之前调用Binder
上的方法,以表明它正在丢弃连接。
它可以正常工作吗?
它应该。 AIDL调用是同步的,因此在您的示例中使用unbindService()
调用Binder
之后才会发生closed()
。