Ручка принудительно закрывается?

Есть ли способ уведомить действие/службу о принудительном закрытии запроса прямо перед тем, как оно будет уничтожено?

Я имею в виду, когда пользователь нажимает кнопку принудительного закрытия в Menu > Settings > Applications > Manage applications > app name > Force Close.


person Shatazone    schedule 04.10.2010    source источник


Ответы (2)


Я думаю, что ActivityManager просто убивает процесс размещения, поэтому вы не сможете получить какое-либо событие/сообщение/предупреждение. Для проверки вы можете создать приложение с одной Activity, которая позволяет узнать, вызывается ли onDestroy, а также, если вызывается isFinishing.

Путь к Menu > Settings > Applications > Manage applications > app name > Force Close в исходниках, если поможет, такой:

Управление приложениями:
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

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

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

person Charlie Collins    schedule 04.10.2010
comment
большое спасибо, чувак, за такое огромное количество информации! что я пытаюсь сделать, так это запустить приложение B после принудительного закрытия приложения A, как вы думаете, это может быть достигнуто в Android? :С - person Shatazone; 04.10.2010
comment
@Shatazone: я искренне надеюсь, что то, что вы хотите, невозможно. Вредоносное ПО моментально воспользуется этой техникой. - person CommonsWare; 04.10.2010
comment
Я догадывался, что вы, возможно, захотите просто зарегистрировать принудительное закрытие, чтобы получить обратную связь или что-то в этом роде. Что касается запуска еще одного приложения, я согласен с CommonsWare, что это определенно не очень хорошая идея. Если пользователь принудительно закрывает ваше приложение, он хочет, чтобы оно закрылось, и они не хотят, чтобы это действие приводило к запуску другого приложения. - person Charlie Collins; 05.10.2010
comment
хммм... да, это можно использовать как брешь в системе безопасности, если с этим можно справиться... - person Shatazone; 05.10.2010

Я довольно новичок здесь и в программировании для Android в целом, так что простите меня, если это не совсем правильно. Однако, насколько я понимаю, диалоговое окно «Приложение не отвечает» (ANR) отображается только в том случае, если ваше приложение либо а) не отвечает, либо б) выдало исключение, которое не было перехвачено.

В случае а) приложение не сможет ответить на какое-либо уведомление о принудительном закрытии в течение разумного периода времени, поскольку оно уже достаточно зависло, чтобы сгенерировать ANR. В случае б) ваше приложение уже мертво.

person LEM    schedule 04.10.2010
comment
спасибо commie64, но это не тот случай, который я имел в виду... так же, как диспетчер задач может убивать запущенные процессы в Windows, вы также можете убивать запущенные приложения в Android независимо от их фактического состояния (зависает или работает) - person Shatazone; 04.10.2010
comment
Извините, в своем изобилии, чтобы ответить, я неправильно понял ваш вопрос. Я не уверен, что здесь этикет, я должен удалить свой ответ? Кроме того, я предполагаю, что этот метод, о котором вы говорите, в основном имитирует то, что делает ANR. Поскольку у ANR не было бы возможности уведомить о зависшем / аварийном приложении, я не верю, что он вызывает какие-либо методы очистки, прежде чем убить его. Так что я бы предположил, что и этот метод не работает. Опять же, это всего лишь предположение, извините. - person LEM; 04.10.2010