对于那些在过去偶然遇到类似疑虑的人来说,这更像是一个关于Android内部的问题。
问题本质上非常简单:
假设我有一个绑定服务,为其他进程中运行的应用程序提供某些功能 - 我怎么知道调用者请求功能是否仍在那里?
假设我有一个实现远程回调的远程服务,如提到here,我怎么能确定还有一个类来接收回调?如何清洁?应用程序离开/崩溃时绑定是否自动关闭,打开文件或套接字的方式是什么?
最后:
如果远程应用程序在没有解除绑定的情况下崩溃,它是否会继续运行,即使那是使用该服务的最后一个应用程序?
感谢所有的提示,伙计们,欣赏它。
答案 0 :(得分:1)
我刚刚对此进行了测试,即使外部组件因未能解除绑定而泄漏ServiceConnection,Android也会终止该服务(前提是它尚未使用startService启动,并且未绑定到其他位置)。在这种情况下,将调用onUnbind和onDestroy。
至于检测注册回调的组件是否还活着,我相信CommonsWare是正确的,你应该尝试回调。但是,您应该能够唤醒调用组件,并将其唤醒。
如果外部组件已死,则回调中有两种所需行为(这样正常的回调将失败):
答案 1 :(得分:0)
假设我有一个绑定服务,为其他进程中运行的应用程序提供某些功能 - 我怎么知道调用者请求功能是否仍在那里?
你没有,AFAIK。
假设我有一个实现远程回调的远程服务,就像这里提到的那样,我怎么能确定还有一个类来接收回调呢?
如果回调对象不再可用(例如,客户端已消失),您应该获得RemoteObjectException
。
如何进行清洁?
我不知道在这种情况下这意味着什么,抱歉。
应用程序离开/崩溃时,绑定是否自动关闭,打开文件或套接字的方式是什么?
是的,虽然您在服务中未收到有关此事实的通知。
如果远程应用程序在没有解除绑定的情况下崩溃,它是否会继续运行,即使那是使用该服务的最后一个应用程序?
我不确定。我希望Android会检测到这一点并停止服务,但我还没试过。