17

我的英语不好,但我会尝试以好的方式解释我的问题。

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

4

3 回答 3

30

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

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

于 2011-03-13T22:55:26.330 回答
2

Android开发人员文档说...

public abstract void onServiceDisconnected (ComponentName name)

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

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

于 2020-07-13T16:19:01.477 回答
1

Context.BIND_AUTO_CREATE在 bindService 中使用过。在应用它对我来说非常完美后,我遇到了同样的问题。

bindService(new Intent(this,XMPPService.class),mConnection, Context.BIND_AUTO_CREATE);
于 2017-02-28T17:51:17.377 回答