Обычно, выходя из приложения, вызывая:
android.os.Process.killProcess(android.os.Process.myPid());
хорошо работает без инцидентов.
Но время от времени приложение снова перезагружается (после выхода!).
Соответствующий отрывок из журнала показывает:
.631: I/Process(15495): Sending signal. PID: 15495 SIG: 9
.641: W/AudioFlinger(121): write blocked for 252 msecs, 1279 delayed writes, thread 0xdc18
.651: I/ActivityManager(164): Process com.ef.myapp (pid 15495) has died.
.651: I/WindowManager(164): WIN DEATH: Window{463659e8 com.ef.myapp/com.ef.myapp.MainActivity paused=false}
.661: I/AudioService(164): AudioFocus abandonAudioFocus() from [email protected]
.701: I/ActivityManager(164): Start proc com.ef.myapp for activity com.ef.myapp/.MainActivity: pid=15589 uid=10077 gids={3003}
Я знаю, что по дизайну ОС Android killProcess() не является надлежащим способом для завершения работы приложения. Это связано с тем, что killProcess() немедленно останавливает процесс , не давая никаких шансов или шансов для приложения, чтобы предотвратить его или подготовиться к нему.
Я знаю, что когда я вызываю finish(), стек приложения просто выталкивается на задний план (и все еще существует в памяти), Сам Android решает, когда закрыть приложение (т.е. Удалить его экземпляр из памяти), и обычно это делается, когда приложение становится "самым старым, которое не используется в течение самого длительного времени". Его поведение на самом деле более предсказуемо, если оно действительно последнее.
Проблема заключается в том, что finish() останавливается и уничтожает активность, для которой он был вызван. Это не останавливает другие действия, порожденные приложением или другими действиями. Таким образом, для удобства тестирования и отладки во время разработки я использую killProcess() как удобный ярлык.
Но теперь я вижу, что это имеет побочный эффект приложения, который иногда перезапускается сразу после убийства - все в течение 30 миллисекунд.
Простое решение состоит в том, чтобы выполнить итерацию всех приложений и finish() их. Но прежде чем приступать к этому, я умираю, чтобы понять , что в ОС Android заставляет приложение воскресить себя.
Почему будет ли Android убивать перезапуск приложения?
И почему непоследовательно? (т.е. иногда)