Mike Barthold Ответов: 3

Как определить выход приложения в Android?


Привет,

точнее, чем говорится в названии:
Я работаю над SIP-приложением, которое использует "липкую" службу при запуске загрузки стека Sip и поддерживает его работу, даже когда приложение находится в фоновом режиме в течение длительного времени и даже когда Android начинает очищать вещи, когда ресурсы становятся низкими.
уровень minApi-15.

Моя техническая проблема заключается в следующем:
- Могу ли я каким-то образом "обнаружить", когда пользователь закрывает приложение из списка open-apps-list с помощью салфетки? Или это простое и понятное "убийство" процесса моего приложения, и нет никакого доступного крючка, чтобы выполнить какое-то последнее действие перед тем, как быть убитым?

Чего мне нужно добиться, так это:
- Сервис остается активным все время, независимо от того, находится ли приложение на переднем плане или в фоновом режиме, и независимо от того, как долго оно там находится.
- Приложение не должно быть "выключено" при нажатии кнопки "назад" на основной деятельности (номеронабиратель) - это требование владельцев продукта - эта часть решена.
Но... - и тут начинается моя проблема:
- Когда пользователь "убивает" приложение (т. е. свайп из списка приложений), стек sip должен выполнить выключение, и пользователь "недоступен" через sip - т. е. "оффлайн". Технически для моего приложения это означает: Shutdown Sip / Stop the sticky service.

Какой подход взять здесь?

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

Afzaal Ahmad Zeeshan

Интересный вопрос, не правда ли onDestory() помочь вам в том, чего вы хотите достичь? Функция выполняется при уничтожении приложения. Я никогда не пробовал его, чтобы проверить удаление свайпа, но, возможно, это может вам помочь.

Mike Barthold

Спасибо за быстрый ответ :)
К сожалению, onDestroy на основной деятельности не помогает - он даже вызывается всякий раз, когда Android думает, что ему нужны ресурсы.
Мне нужна точка, где "пользователь" предпринимает "сознательное действие" по уничтожению приложения *сейчас*.
Я не совсем уверен, возможно ли это так, как этого хотят владельцы продукта.

3 Ответов

Рейтинг:
26

ridoy

onDestroy() и onStop() не будут запущены, если приложение будет закрыто из списка последних приложений или убито системой android. Но может быть и обходной путь вроде этого:

Как обрабатывать код, когда приложение убивается при пролистывании в android? - переполнение стека[^]
android - Как обнаружить приложение, Удаленное из последнего списка - переполнение стека[^]


Mike Barthold

Это похоже на то, что я искал - onTaskRemoved - до сих пор не знал флага манифеста - большое вам спасибо!

ridoy

Спасибо!

Рейтинг:
1

Richard MacCutchan

Не уверен, что вы можете получить то, что просите, но Активность | Разработчики Android[^] показывает различные обратные вызовы, которые вы можете использовать.


Рейтинг:
1

Karthik V Ambakad

Я не уверен, что это сработает, если вы не можете сделать начальный план. Просто убедитесь, что вы START_STICKY в onStartCommand. Это все равно убьет службу, но она должна автоматически запустить службу еще раз через несколько секунд. Надеюсь, то, что я сказал, поможет вам.