Android: как проверить, сколько памяти осталось?

Ниже приведена моя формула, чтобы проверить, сколько осталось памяти (не сколько памяти осталось в текущей куче, но сколько больше памяти может быть использовано до сбоя приложения). Я не уверен, что это правильно, не так ли?

double max = Runtime.getRuntime().maxMemory(); //the maximum memory the app can use double heapSize = Runtime.getRuntime().totalMemory(); //current heap size double heapRemaining = Runtime.getRuntime().freeMemory(); //amount available in heap double nativeUsage = Debug.getNativeHeapAllocatedSize(); //is this right? I only want to account for native memory that my app is being "charged" for. Is this the proper way to account for that? //heapSize - heapRemaining = heapUsed + nativeUsage = totalUsage double remaining = max - (heapSize - heapRemaininng + nativeUsage); 

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

 Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo(); Debug.getMemoryInfo(memoryInfo); String memMessage = String.format( "Memory: Pss=%.2f MB, Private=%.2f MB, Shared=%.2f MB", memoryInfo.getTotalPss() / 1024.0, memoryInfo.getTotalPrivateDirty() / 1024.0, memoryInfo.getTotalSharedDirty() / 1024.0); 

Это старый stream, но это, похоже, работает:

  Runtime.getRuntime().gc(); long memoryAvailable = (Runtime.getRuntime().maxMemory() - Runtime.getRuntime().totalMemory() + Runtime.getRuntime().freeMemory()); 

totalMemory-freeMemory – текущая используемая память.

Таким образом, это сводится к:

(maximum possible memory)-(current used memory)

Изменить для добавления: freeMemory не учитывает доступную память для сбора мусора, поэтому вы можете попробовать Runtime.getRuntime (). Gc (), хотя понимаете, что могут иметь свои собственные последствия (например, визуальные икоты, если они запускаются в streamе пользовательского интерфейса).

  • Использование контекста в fragmentе
  • Как нарисовать круг на canvasе в Android?
  • Не удается разрешить метод getMap ()
  • Фрагменты Android: когда использовать скрыть / показать или добавить / удалить / заменить?
  • Как сделать простой поиск в строке в базе данных Firebase?
  • Android Studio: установка приложения не выполнена
  • Добавление элемента подменю ListView в Android
  • Android READ PHONE STATE?
  • Как отладить apk, подписанный для выпуска?
  • DoubleTap в android
  • Расширение от двух classов
  • Interesting Posts

    Как проверить, установлены ли какие-либо флаги комбинации флагов?

    Почему FFmpeg добавляет пустое черное видео в конец моих файлов MP4 при сжатии из MOV?

    На OS X, как я могу запустить Cacoa emacs * и * перенести его на передний план?

    Консоль управления IIS не найдена в Windows 7 Home Basic

    Mongoose: глубокое наseleniumие (заполнение наseleniumного поля)

    Лучший способ найти точку на круге, ближайшем к данной точке

    Удаление неиспользуемых расширений Firefox

    Можно ли запустить исполняемый файл Windows в Mac OS X?

    В чем разница между полем, переменной, атрибутом и свойством в Java POJO?

    Как обновить PDF без создания нового PDF?

    Отображение изображений из определенной папки на SD-карте с использованием gridview

    Mac Text Editor (с списком функций)

    Конфигурация, необходимая для работы примера Sencha ExtJS TreeGrid

    Я использую Windows, и я хочу использовать Dropbox для резервного копирования папки вне моего каталога Dropbox

    Как работает ноутбук с HDD, когда он движется?

    Давайте будем гением компьютера.