Какие события жизненного цикла вызываются, когда приложение удаляется из списка последних приложений? - PullRequest
0 голосов
/ 08 марта 2019

Насколько я понимаю из этого вопроса и официального справочника и руководства , только onDestroy() вызывается, когда мое приложение удаляется изсписок последних приложений.

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

Parameter specified as non-null is null: 
method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter intent 
at com.example.soulfetch2.BordunService.onStartCommand(BordunService.kt)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3468)`

Как вonDestroy(), служба даже не упомянута, должно быть что-то еще, пытающееся получить доступ к службе, которая больше не существует.Любая идея, что это может быть?

Если onPause() и / или onStop() также называются, есть ли способ отличить случай удаления от других случаев, в которых эти два называются?

Ответы [ 3 ]

1 голос
/ 08 марта 2019

Как и в onDestroy (), сервис даже не упоминается, должен быть что-то еще пытается получить доступ к службе, которая не существует больше. Есть идеи, что бы это могло быть?

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

Если onPause () и / или onStop () также вызываются, есть ли способ Отличить случай удаления от других случаев, в которых эти два называются?

Пока я знаю, что нет способа отличить регистр удаления.

но все равно я получаю исключение недопустимого аргумента, когда мое приложение удален из списка

Чтобы исправить это, вы можете посмотреть, что опубликовал Ge3ng. Это исправит вашу проблему.

1 голос
/ 08 марта 2019

Когда вы открываете последние приложения, вызываются onPause и onStop, поэтому, когда ваша активность удаляется, в жизненном цикле остается только onDestroy.

Для вашего исключения метод onStartCommand должен иметьследующая подпись

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int) : Int

Согласно документации 1010 *

Это может быть нулевым, если служба перезапускается после того, как ее процесс завершился, и онаранее вернул все, кроме START_STICKY_COMPATIBILITY.

0 голосов
/ 11 марта 2019

У вас есть Service, который возвращает START_STICKY из onStartCommand().Когда вы проводите задачу из списка недавних задач, Android убивает процесс ОС, на котором размещены ваши действия и ваши Service.

Поскольку вы сказали Android (через START_STICKY), что хотите, чтобы ваш Service был перезапущенв случае, если Android убивает его, Android выполняет ваш запрос и перезапускает ваш Service.Когда он делает это, он вызывает onStartCommand() с null Intent.

ПРИМЕЧАНИЕ. Я предполагаю, что onDestroy() вообще не вызывается в вашей деятельности.Вы можете добавить протоколирование к onDestroy(), чтобы проверить, так ли это.

...