2012-06-22 4 views
3

Если приложение принудительно останавливается, выполнив шаги Settings-> Application-> ManageApplications -> -> Force Stop, вызывает ли андроид onDestroy для Activity или Application? (Если нет, есть ли способ узнать, умерло ли приложение из-за силовой остановки, вызванной пользователем).Сила Android Остановить обратный вызов приложения?

+0

Но как насчет приложения Защита приложений? они используют отверстие безопасности, чтобы стать root? Потому что, если вы принудительно остановите приложение, он начнется снова, независимо от того, как вы его убьете, он начнется снова. – David

ответ

8

Принудительное прекращение приложения уничтожит весь процесс (т. Е. С Process.killProcess(int pid)). Все ресурсы, связанные с приложением, будут удалены и освобождены ядром. Нет, нет никакого способа перехватить это действие.

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

+0

Благодарим вас за ответ. – Chris

3

Короче говоря, нет, onDestroy() не вызывается, и вы не можете этого сделать. Android не поддерживает его.

Более расширенный ответ ...

onDestroy() не кажется, можно назвать в этом сценарии. Я протестировал это, пытаясь получить его Toast меня до вызова super.onDestroy, но сообщение Toast так и не появилось. (И согласно this post, onDestroy() действительно ненадежен и не будет часто вызываться, если вообще, на телефонах, тогда как его можно вызвать на эмуляторе - так что имейте это в виду). Вместо этого вызывается killProcess(), и мы не можем его перехватить.

Кроме того, в соответствии с принятым ответом в this post, мы не можем даже поймать и выполнить задачи после остановки пользователя.

+0

Как и в большинстве случаев, нет гарантии, что 'onDestroy()' будет вызываться. –

+0

Точно. Это уже сказано в моем ответе. – Mxyk

+0

Извините, я не предлагал вам ошибиться ... просто хотел немного обобщить ответ («как в большинстве случаев»). Надеюсь, вы не против. :) –

0

№ Это не возможно. Я не рассматривал данный код Android, но я бы предположил, что «принудительная остановка» просто вызывает kill идентификатор процесса вашего приложения. Таким образом, единственный способ, которым вы могли бы перехватить это, - это захватить сигналы, которые я не думаю, что Android позволяет.

Если вы были укоренены, вы могли бы сделать это, но не любым стандартным способом.

+0

Умение обрабатывать сигналы будет, по-моему, довольно серьезным недостатком безопасности. : P –

Смежные вопросы