我的英语不好,但我会尽力解释我的问题。
所以,问题是:
1)我有本地服务
2)我启动它然后绑定它。
3)当我即将关闭该服务时出现问题。永远不会调用我的类 ServiceConnection 实现中的 onServiceDisconnected 方法。如果我手动(从设置),unbindService或stopService,或unbindService和stopService的组合关闭它 - onServiceDisconnected 仍然不会被调用。
我做错了什么?
简短代码如下:
protected ServiceConnection mServerConn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
Log.d(LOG_TAG, "onServiceConnected");
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.d(LOG_TAG, "onServiceDisconnected");
}
}
public void start() {
// mContext is defined upper in code, I think it is not necessary to explain what is it
mContext.bindService(i, mServerConn, Context.BIND_AUTO_CREATE);
mContext.startService(i);
}
public void stop() {
mContext.stopService(new Intent(mContext, ServiceRemote.class));
mContext.unbindService(mServerConn);
}
我正在Android 2.2的模拟器下测试此代码
答案 0 :(得分:29)
onServiceDisconnected仅在极端情况下被调用(崩溃/被杀死)。
这对于本地服务来说是不太可能发生的,因为所有应用程序组件通常都在同一个进程中运行...这意味着,除非您有意解除绑定或销毁该服务,否则它应该保持连接,或者使用它来消除组件
答案 1 :(得分:2)
Android开发人员文档说...
public abstract void onServiceDisconnected (ComponentName name)
在与服务的连接丢失时调用。当托管服务的进程崩溃或被杀死时,通常会发生这种情况。这不会删除ServiceConnection本身-与服务的绑定将保持活动状态,并且下次运行该服务时,您将收到对
onServiceConnected(ComponentName, IBinder)
的调用。
答案 2 :(得分:1)
我在bindService中使用了Context.BIND_AUTO_CREATE
。在应用完适合我的工作后,我得到同样的问题。
bindService(new Intent(this,XMPPService.class),mConnection, Context.BIND_AUTO_CREATE);