Android, отменить привязку сервиса и onServiceDisconnected проблема - PullRequest
17 голосов
/ 14 марта 2011

Я не очень хорошо говорю по-английски, но я бы попытался объяснить мою проблему хорошим способом.

Итак, проблема в том, что:1) у меня есть местный сервис2) Я запускаю его, а затем привязываюсь к нему.3) Проблема появляется, когда я собираюсь закрыть эту службу. onServiceDisconnected метод из моей реализации класса ServiceConnection никогда не вызывается.Если я закрою его вручную (из настроек), или с помощью 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

Ответы [ 2 ]

29 голосов
/ 14 марта 2011

onServiceDisconnected вызывается только в экстремальных ситуациях (сбой / уничтожение).

, что очень маловероятно для локальной службы, поскольку все компоненты приложения обычно работают в одном и том же процессе ... то есть, если вынамеренно удалите или уничтожьте службу, она должна оставаться подключенной или умереть с компонентом, использующим ее.

1 голос
/ 28 февраля 2017

Я использовал Context.BIND_AUTO_CREATE в bindService. У меня возникла та же проблема после применения его идеально подходит для меня.

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