IllegalArgumentException: Сервис не зарегистрирован:

У меня есть несколько действий в моем приложении, каждое действие вызывает bindservice и unbindservice для извлечения данных. В первом действии bindservice и unbindservice работают нормально. Во втором действии (которое повторно использует ту же службу) метод связывания ссылок работает отлично, но метод unbindservice дает исключение:

IllegalArgumentException: Service not registered:

Пожалуйста, помогите.

Ответы

Ответ 1

Вопрос NikkyD очень хорош, и это помогло найти причину этого исключения в моем случае. Для тех, кто сталкивается с такой же проблемой, убедитесь, что вызов callService и вызов unbindService выполняются в том же контексте. Надеюсь, что это поможет.

Ответ 2

Несколько клиентов могут одновременно подключиться к службе. Однако система вызывает ваш метод onBind() для извлечения IBinder только тогда, когда первый клиент связывается. Затем система передает тот же IBinder всем дополнительным клиентам, которые связывают, не вызывая onBind() снова. http://developer.android.com/guide/components/bound-services.html Несколько компонентов могут сразу связываться с сервисом, но когда все они отвязаны, служба уничтожается. Итак, пожалуйста, проверьте, убьете ли вы службу в первый раз. Может пройти IBind для каждой деятельности гораздо лучше. Потому что он просто возвращает только один.

Ответ 3

У меня была эта проблема со старым API. (Android 2.2) Я получил эту ошибку, когда вызвал этот метод: (из учебника по биллингам)

@Override
    public void onDestroy() {
       super.onDestroy();
       try {
           if (mHelper != null) mHelper.dispose();
           mHelper = null;
       }catch (IllegalArgumentException e){
           Log.d("TMA Billing Android 2.2","Error: "+e.getMessage());
           mHelper = null;
       }

    }

Как вы можете видеть, я окружил его Try Catch, и теперь он работает без проблем на Android 2.2.

Ответ 4

Почему мы получаем эту ошибку?

Иногда мы получаем эту ошибку, когда в Activity unbindService() bindService() перед bindService()

enter image description here

Типичный пример

это когда мы связываем службу в onCreate() и отменяем привязку в onPause() или onStop() из Activity.

Как избежать?

Случай 1. Если вы хотите взаимодействовать со службой только тогда, когда видимость видна, следуйте этому порядку.

bindService() в onStart() и unbindService() в onStop()

Случай 2: Когда вы хотите взаимодействовать со службой, даже если активность находится в фоновом режиме,

bindService() в onCreate() и unbindService() в onDestroy()