Подтвердить что ты не робот

Как работает onLowMemory на Android?

Я хотел бы знать, как выполняется функция onLowMemory()

например,

Скажем, у меня есть 3 действия, каждый из которых имеет функции onLowMemory(), переопределенные для очистки данных из ОЗУ. У меня также есть 1 Application класс, который также переопределяет onLowMemory() для очистки некоторых данных глобального состояния.

Теперь скажем, что мы переходим от активности A → активность B → активности C, а от активности C у нас заканчивается память. Мой вопрос: что происходит после этого?

Из того, что я понимаю, будет вызвана функция onLowMemory() функции Activity C и Application, я прав? Вызывается функция onLowMemory() активности A и B?

Также я считаю, что действия A и B будут убиты (поскольку они являются фоновой деятельностью), но прежде чем эти действия будут убиты, вызывают ли их соответствующие onLowMemory()?

4b9b3361

Ответ 1

Когда память телефона низкая, фоновые процессы будут уничтожены фреймворком. Если последний фоновый процесс убит, инфраструктура будет вызывать onLowMemory для каждого приложения.

Это описано в исходных кодах. См.: https://github.com/android/platform_frameworks_base/blob/master/services/java/com/android/server/am/ActivityManagerService.java#L3088

  // If there are no longer any background processes running,
  // and the app that died was not running instrumentation,
  // then tell everyone we are now low on memory.

Ответ 2

Согласно документации http://developer.android.com/reference/android/app/Application.html#onLowMemory%28%29

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

Ответ 3

google рассказывает об этой функции в одном из своих видео:

http://www.youtube.com/watch?v=gbQb1PVjfqM&feature=player_embedded#t=682s

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