我创建了Android服务文章扩展Binder类http://developer.android.com/guide/topics/fundamentals/bound-services.html中提供的示例本地服务项目。
一切正常。但是查询是
使用unbind(),服务不会停止。如果是,那么我是否需要显式地使用stopSelf()而不是unbind()。
我创建了带有三个按钮的示例项目 - >开始,停止和获取
开始 - >绑定服务
停止 - >取消绑定服务
开始 - >访问服务方法。 (随机数生成方法)
现在访问:
start - 绑定服务
fetch - 访问服务方法
停止 - 取消绑定服务
在这里,我除了服务将解除绑定和销毁。然而
第4步:获取 - 此方法仍然有效并生成随机数,而预期是某种异常或可能是强制关闭。
(不会调用onServiceDisconnected:因为只有在崩溃的情况下才会调用它)
答案 0 :(得分:1)
对于远程服务 - 您绑定的服务位于另一个进程中 - 尝试在解除绑定后调用binder代理上的方法时应该生成RemoteException
。
对于本地服务 - 服务仍在您的过程中 - 尝试在解除绑定后调用绑定器上的方法仍然有效。在这种情况下,绑定程序与您的服务通过onBind()
返回的对象完全相同。垃圾收集规则规定,如果你抓住活页夹,活页夹就不能被垃圾收集。
但是,在解除绑定后调用绑定器上的方法是危险的并且形式不佳。 服务认为它已被销毁。如果您的活页夹依赖于在onDestroy()
中清理的服务,那么可能会导致崩溃。同样,您正在泄漏服务的内存,直到您允许垃圾回收。