Как работает onLowMemory на Android?
Я хотел бы знать, как выполняется функция onLowMemory()
например,
Скажем, у меня есть 3 действия, каждый из которых имеет функции onLowMemory()
, переопределенные для очистки данных из ОЗУ. У меня также есть 1 Application
класс, который также переопределяет onLowMemory()
для очистки некоторых данных глобального состояния.
Теперь скажем, что мы переходим от активности A → активность B → активности C, а от активности C у нас заканчивается память. Мой вопрос: что происходит после этого?
Из того, что я понимаю, будет вызвана функция onLowMemory()
функции Activity C и Application, я прав? Вызывается функция onLowMemory()
активности A и B?
Также я считаю, что действия A и B будут убиты (поскольку они являются фоновой деятельностью), но прежде чем эти действия будут убиты, вызывают ли их соответствующие onLowMemory()
?
Ответы
Ответ 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
однако, я думаю, что до сих пор неясно, когда вызывается такой метод, и если это может помочь избежать нашего приложения, которое будет убито в результате наличия большого количества процессов и что у нас будет много памяти.