Android принудительно закрыть, что именно происходит с памятью

У меня есть несколько услуг в моем приложении. Приложение работает в процессе «android.uid.system». Когда я нажимаю «принудительно закрыть», журналы говорят:

Принудительная остановка пакета com.sec.ims.android uid=1000 Принудительная остановка службы ServiceRecord{42b9a948 ... .....

Я вижу это для каждой службы, работающей под моим приложением. Там вообще нет вызова onDestroy(). Мне интересно, что именно делает андроид после «принудительного закрытия»? Остановка всего процесса или просто остановка всех служб, действий, работающих в приложении?

Знаете ли вы, что происходит с объектами, статическими переменными и потоками, созданными этими службами? Стирает ли Android всю кучу памяти для этого приложения?


person jason_becker    schedule 20.02.2013    source источник


Ответы (3)


Принудительная остановка уничтожит виртуальную машину (виртуальную машину), на которой запущено приложение. Все объекты, службы и действия уничтожаются.

person Phil    schedule 20.02.2013

Это зависит от того, как вы запустили службу.

Использование startService() переопределяет значение по умолчанию время жизни службы, которым управляет bindService().

Когда используется startService(), жизненный цикл вашего сервиса сохраняется, когда исходное действие закрывается.

В обоих случаях Android останавливает службы, когда требуется память.

person Timmetje    schedule 20.02.2013

Я думаю. Эта проблема связана с нехваткой памяти. Android PF убивает живой процесс, когда процесс с более высоким приоритетом нуждается в куче.

[ps]

  • если вы намеренно создаете ситуацию Low Memory Killer. Я рекомендую вам использовать следующее мое приложение. http://kyorohiro.blogspot.jp/2013/02/inside-kyorostress-1-produce-low-memory.html

  • если эта проблема связана с проблемой нехватки памяти, ваша служба и процесс будут перезапущены. но данные вашего приложения стираются в куче java.

  • если PF перезапустит ваш процесс. затем вызовите onCreate().

  • Жизненный цикл службы изменяется с помощью возвращаемого значения onStartCommand . проверьте ссылку Android API.
person kyorohiro    schedule 20.02.2013