Есть ли способ уведомлять активность/службу запроса принудительного закрытия до того, как он будет убит?
Я имею в виду, когда пользователь нажимает кнопку закрытия силы в Menu > Settings > Applications > Manage applications > app name > Force Close
.
Я думаю, что ActivityManager просто убивает процесс хостинга, поэтому вы не сможете получить какое-либо событие/сообщение/предупреждение. Чтобы проверить, можно ли создать приложение, в котором есть одно действие, которое позволяет узнать, вызывается ли onDestroy, и, кроме того, если вызывается isFinishing.
Путь к Menu > Settings > Applications > Manage applications > app name > Force Close
в источнике, в случае его использования, следующий:
ManageApplications:
https://android.googlesource.com/platform/packages/apps/Settings/+/froyo-release/src/com/android/settings/ManageApplications.java
InstalledAppDetails:
https://android.googlesource.com/platform/packages/apps/Settings/+/froyo-release/src/com/android/settings/InstalledAppDetails.java
ActivityManager.forceStopPackage:
https://android.googlesource.com/platform/frameworks/base/+/froyo-release/core/java/android/app/ActivityManager.java
ActivityManagerNative.forceStopPackage:
https://android.googlesource.com/platform/frameworks/base/+/froyo-release/core/java/android/app/ActivityManagerNative.java
Как только он набирается на собственном уровне, он переходит в Службу, которая выполняет грязную работу. Опять же, я бы догадался, что это просто останавливает процесс, но это догадка, и я не знаю, с моей точки зрения, где другая сторона родного интерфейса находится в источнике, чтобы проверить (хотя это где-то, если вы ткните вокруг и хотите знать наверняка).
Также вы можете добавить, почему вы хотите эту информацию на свой вопрос, может быть другой/лучший угол, чтобы получить то, что вы хотите выполнить, в зависимости от этого.
Я довольно новый здесь и для Android-программирования в целом, поэтому простите меня, если это не совсем правильно. Тем не менее, я понимаю, что диалог Application Not Responseing (ANR) отображается только в том случае, если ваше приложение является либо a) неактивным, либо b) вызвало исключение, которое не было обнаружено.
В случае, если а) приложение не сможет ответить на любое уведомление о принудительном закрытии в течение разумного промежутка времени, так как оно уже повесило достаточно, чтобы создать ANR. В случае b) ваша заявка уже мертва.