我有一个远程服务,我想使用该服务检查onPrepareOptionsMenu
. 但有时当我从其他活动回来时,我会遇到“binder null”异常。我将 binder 设置为 null in onServiceDisconnected
。
我的问题:
- 是否
onServiceDisconnected
在活动 onStop 后调用? bindService
用inonStart
代替更好onCreate
吗?- 您能否简单解释一下本地服务和远程服务的区别?
我有一个远程服务,我想使用该服务检查onPrepareOptionsMenu
. 但有时当我从其他活动回来时,我会遇到“binder null”异常。我将 binder 设置为 null in onServiceDisconnected
。
我的问题:
onServiceDisconnected
在活动 onStop 后调用?bindService
用inonStart
代替更好onCreate
吗?1)onServiceDisconnected()
仅当服务意外终止时才会调用,例如托管服务的进程崩溃时。当您自己解除与服务的绑定时,它不会被调用。从文档中:
当与服务的连接丢失时调用。这通常发生在托管服务的进程崩溃或被终止时。这不会删除 ServiceConnection 本身——这个与服务的绑定将保持活动状态,并且当服务下次运行时,您将收到对 onServiceConnected(ComponentName, IBinder) 的调用。
2)一般情况下,如果您在 Activity 停止时不需要连接到服务,那么是的,绑定onStart()
和取消绑定onStop()
是正确的方法。这里的想法是当你的活动在后台时你不会浪费资源。但是,绑定服务的文档指出,在某些情况下onCreate()
绑定和取消绑定onDestroy()
也是可以的。
3)本地服务意味着服务与消费者处于同一进程中。远程服务是处于不同进程中的服务。