Обычно выход из моего приложения по телефону:
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 android.media.AudioManager@460b2b98
.701: I/ActivityManager(164): Start proc com.ef.myapp for activity com.ef.myapp/.MainActivity: pid=15589 uid=10077 gids={3003}
Я знаю, что по замыслу ОС Android killProcess()не является правильным способом завершения приложения. Это потому, что killProcess()останавливает процесс немедленно , не давая возможности приложению предотвратить его или подготовиться к нему.
Я знаю, что когда я звоню , заканчиваю(), стек приложения просто перемещается в фоновый режим (и все еще существует в памяти ). Android сам решает, когда закрыть приложение (, т.е. удалить его экземпляр из памяти ), и обычно это делается, когда приложение становится «самым старым, не используемым дольше всего». Его поведение на самом деле более предсказуемо, если это действительно последний .
Проблема в том, что закончить()только останавливает и разрушает деятельность, для которой она была призвана. Он не останавливает другие действия, порожденные приложением, или другие действия. Так,для простоты тестирования и отладки во время разработки я использую killProcess()как удобный ярлык.
Но теперь я вижу, что это имеет побочный эффект: приложение иногда перезапускается сразу после самоуничтожения --всего в течение 30 миллисекунд .
Простым решением было бы перебрать все действия приложения и закончить()их. Но прежде чем приступить к этому, я умираю от желания понять что в ОС Android заставляет приложение воскрешать себя.
Почему Android перезапускает убитое приложение?
А почему непоследовательно? (т.е. иногда)