Android,unbind服务和onServiceDisconnected问题

时间:2011-03-13 22:39:39

标签: android service unbind

我的英语不好,但我会尽力解释我的问题。

所以,问题是:
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的模拟器下测试此代码

3 个答案:

答案 0 :(得分:29)

onServiceDisconnected仅在极端情况下被调用(崩溃/被杀死)。

这对于本地服务来说是不太可能发生的,因为所有应用程序组件通常都在同一个进程中运行...这意味着,除非您有意解除绑定或销毁该服务,否则它应该保持连接,或者使用它来消除组件

答案 1 :(得分:2)

Android开发人员文档说...

public abstract void onServiceDisconnected (ComponentName name)

在与服务的连接丢失时调用。当托管服务的进程崩溃或被杀死时,通常会发生这种情况。这不会删除ServiceConnection本身-与服务的绑定将保持活动状态,并且下次运行该服务时,您将收到对onServiceConnected(ComponentName, IBinder)的调用。

更多信息:https://developer.android.com/reference/android/content/ServiceConnection#onServiceDisconnected(android.content.ComponentName)

答案 2 :(得分:1)

我在bindService中使用了Context.BIND_AUTO_CREATE。在应用完适合我的工作后,我得到同样的问题。

bindService(new Intent(this,XMPPService.class),mConnection, Context.BIND_AUTO_CREATE);