Почему приложение иногда перезагружается при killProcess?

Обычно выход из моего приложения по телефону:

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 перезапускает убитое приложение?

А почему непоследовательно? (т.е. иногда)

10
задан Community 23 May 2017 в 11:47
поделиться