Как получить текущее использование памяти в андроиде?

Я использовал/proc/meminfo и проанализировал команду response.however, это заканчивается шоу что:

MemTotal: MemFree на 94 348 КБ: 5 784 КБ

средства. это показывает, что существует только 5 МБ свободной памяти. Действительно ли это возможно с мобильным андроидом? Существует только приложение 5-6, установленное по моему мобильному телефону, и никакая другая задача не работает. но все еще эта команда показывает, что существует очень мало свободной памяти.

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

101
задан James Z 19 June 2015 в 12:15
поделиться

3 ответа

ВНИМАНИЕ! Этот ответ измеряет использование / доступную память УСТРОЙСТВА. Это НЕ то, что доступно вашему приложению. Чтобы измерить, что делает ваше приложение, и РАЗРЕШЕНО ли это делать, используйте ответ разработчика Android .


Документация по Android - ActivityManager.MemoryInfo

  1. команда parse / proc / meminfo. Вы можете найти справочный код здесь: Получить использование памяти в Android

  2. использовать приведенный ниже код и получить текущую оперативную память:

     MemoryInfo mi = new MemoryInfo ();
    ActivityManager activityManager = (ActivityManager) getSystemService (ACTIVITY_SERVICE);
    activityManager.getMemoryInfo (mi);
    double availableMegs = mi.availMem / 0x100000L;
    
    // Процент можно рассчитать для API 16+
    двойной процентAvail = mi.availMem / (двойной) mi.totalMem * 100.0;
    

Объяснение числа 0x100000L

1024 bytes      == 1 Kibibyte 
1024 Kibibyte   == 1 Mebibyte

1024 * 1024     == 1048576
1048576         == 0x100000

Совершенно очевидно, что число используется для преобразования байтов в мебибайт

P.S: нам нужно вычислить общий объем памяти только один раз. поэтому вызывайте точку 1 только один раз в своем коде, а затем после этого вы можете повторно вызывать код точки 2.

166
ответ дан 24 November 2019 в 04:36
поделиться

Другой способ (в настоящее время на моем G1 отображается 25 МБ свободного места):

MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableMegs = mi.availMem / 1048576L;
17
ответ дан 24 November 2019 в 04:36
поделиться

Философия управления памятью Linux такова: «Свободная память - это потраченная впустую память».

Я предполагаю, что следующие две строчки покажут, сколько памяти находится в «Буферах» и сколько в «Кэшированных». Хотя между ними есть разница (пожалуйста, не спрашивайте, в чем эта разница :), они оба примерно в сумме составляют объем памяти, используемый для кеширования файловых данных и метаданных.

Намного более полезным руководством по освобождению памяти в системе Linux является команда free (1) ; на моем рабочем столе он сообщает такую ​​информацию:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          5980       1055       4924          0         91        374
-/+ buffers/cache:        589       5391
Swap:         6347          0       6347

Строка +/- buffers / cache: - это волшебная строка, она сообщает, что у меня действительно есть около 589 мегабайт активно необходимой памяти для процессов и около 5391 мегабайт памяти. свободная память в том смысле, что 91 + 374 мегабайта буферов / кэшированной памяти могут быть выброшены, если память может быть более выгодно использована в другом месте.

(Моя машина работала около трех часов, почти ничего не делая, кроме stackoverflow, поэтому у меня так много свободной памяти.)

Если Android не поставляется с free (1) , вы можете выполнить вычисления самостоятельно с помощью файла / proc / meminfo ; Мне просто нравится формат вывода free (1) . :)

12
ответ дан 24 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: