Intereting Posts
Нужна таблица кодов клавиш для андроида и докладчика Как запрашивать (цену) информацию для нескольких продуктов в приложении одновременно? Как создать пользовательский интерфейс или виджет, который находится поверх всех приложений на Android? Как изменить пользовательский шрифт элемента меню Android? Не удалось найти свойство «xxxx» на com.android.build.gradle.AppExtension_Decorated Realm, RxJava, asObservable () и doOnUnsubscribe () Android: MediaPlayer безразличный или бесшовный просмотр видео SharedElement и пользовательский EnterTransition вызывают утечку памяти Для протокола Parcelable требуется объект Parcelable.Creator, называемый CREATOR (у меня есть CREATOR) Автоматический прокрутка до горизонтальногоScrollView Использование трансляции / широковещательного приемника для отправки сообщений от службы к активности Должен ли я закрывать область на основе потока или на использование / класс? Android: загрузка растрового изображения альфа-маски Как захватить / записать клип из видео URL в Android и сохранить на телефон Класс не найден при разборке при передаче Parcelable через Messenger на удаленную службу

Определение доступной памяти на Android

Таким образом, одной из проблем на Android являются различные характеристики устройства (в частности, память устройства).

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

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

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

Это также затрудняет понимание того, что является хорошим дефолтом для LRU.

В идеальном мире Android будет использовать обратный вызов с низкой памятью в качестве подсказки (так что я мог бы начать с небольшого LRU и периодически увеличивать его до тех пор, пока не начнутся обратные вызовы с низкой памятью, а затем верните его, чтобы найти хорошее значение для устройства) , Но по моему опыту этот обратный вызов никогда не совпадает с фактическим давлением памяти виртуальной машины.

Кто-нибудь может найти разумный способ обнаружить, что ваша модель данных использует слишком много памяти на определенном устройстве?

Solutions Collecting From Web of "Определение доступной памяти на Android"

Если вы хотите определить доступную память в android, то вы можете проверить или перейти в перспективу -> ddms 2), во-вторых, вы можете использовать инструменты анализатора памяти, проверенные в используемой и неиспользуемой памяти, вы также проверяете доступность памяти.

Будет ли это работать?

 MemoryInfo mi = new MemoryInfo(); ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); activityManager.getMemoryInfo(mi); long availableMegs = mi.availMem / 1048576L; 

Если вы используете Android NDK:


 #include <unistd.h> size_t getTotalSystemMemory() { long pages = sysconf(_SC_PHYS_PAGES); long page_size = sysconf(_SC_PAGE_SIZE); return pages * page_size; } size_t getFreeSystemMemory() { long pages = sysconf(_SC_AVPHYS_PAGES); long page_size = sysconf(_SC_PAGE_SIZE); return pages * page_size; }