Почему unregisterReceiver () никогда не вызывает onServiceDisconnected?

Я привязываюсь к Сервису в своей деятельности:

override fun onStart() { Timber.d("onStart") super.onStart() val intent = Intent(this, MyService::class.java) bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE) } 

который работает до сих пор. Затем bindService() вызывает onServiceConnected() :

 /** Defines callbacks for service binding, passed to bindService() */ private val serviceConnection = object : ServiceConnection { override fun onServiceConnected(className: ComponentName, service: IBinder) { // We've bound to MyService, cast the IBinder and get MyService instance val binder = service as MyService.MyBinder myService = binder.service isBound = true registerReceiver(myBroadcastReceiver, filter) } override fun onServiceDisconnected(arg0: ComponentName) { myService!!.removeRecevier(this@MainActivity) isBound = false unregisterReceiver(myBroadcastReceiver) } } 

В моем onStop() меня также есть unbindService(serviceConnection) , но здесь onServiceDisconnected () никогда не запускается? Что я делаю не так?

Поэтому я получаю:

 Activity MainActivity has leaked IntentReceiver com.example.MyBroadcastReceiver@68091a2 that was originally registered here. Are you missing a call to unregisterReceiver()? android.app.IntentReceiverLeaked: Activity MainActivity has leaked IntentReceiver com.example.MyBroadcastReceiver@68091a2 that was originally registered here. Are you missing a call to unregisterReceiver()? 

    Вы неправильно понимаете цель onServiceDisconnected()

    Вызывается, когда соединение с Сервисом потеряно. Обычно это происходит, когда процесс, на котором выполняется служба, разбился или был убит. Это не устраняет сам ServiceConnection – эта привязка к службе будет оставаться активной, и при следующем запуске службы вы получите вызов onServiceConnected(ComponentName, IBinder) .

    Так что это на самом деле называется только, когда вы теряете соединение с фактическим сервисом. Когда вы отключаете службу, вам необходимо выполнить очистку вручную. Лучше обрабатывать приемник на другом (другом) уровне, чем ServiceConnection – например, onStart() / onStop() .

    Intereting Posts
    Объясните, почему показано предупреждение. Не отмечен ли источник-источник.readArrayList (data !!. JavaClass.classLoader) как ArrayList <Data>? Как установить тестовый код, завернутый в `runOnUiThread`? как использовать весенние аннотации, такие как @Autowired или @Value в kotlin для примитивных типов? Можно ли использовать деструктурирование в аргументах функции? Текстовое изображение потока вокруг изображения JavaRX: как вернуть кешированное значение немедленно и параллельно выполнить сетевой запрос Выбранный в настоящее время отладчик Java не поддерживает точки останова типа «Точки останова линии Котлин», Не могу построить проект с Android Studio 2.3 и Gradle Столкновение с расширением Kotlin Ошибка рендеринга в редакторе макетов Android Studio 3.0 Как преобразовать Int в строку в Kotlin Ссылка на метод определения свойств Kotlin REST для машинописных определений Сгладить итератор двумерного массива в Котлине Обновление содержимого субтитров MediaBrowserService