Получить общий объем оперативной памяти, который использует приложение в Android - PullRequest
5 голосов
/ 13 декабря 2011

Я хочу собрать немного статистику с моего телефона Android.

Когда я запускаю свое приложение, я хочу знать следующее:

  • Сколько оперативной памяти использует приложение.
  • Сколько свободной оперативной памяти у моего телефона.
  • Сколько всего оперативной памяти у моего телефона.

Что мне нужно сделать, чтобы собрать эту статистику, возможно, написать какой-нибудь код или, может быть, Вы используете некоторые приложения, которые дают такую ​​информацию или, возможно, что-то остальное. Я использую MAT, но это не помогает мне, может быть, я что-то упускаю.

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


Отредактировано

Например, мое приложение использует библиотеку ( helper.jar ), размер которой составляет 85 МБ, я знаю, что если приложение использует .jar, оно загружается в оперативную память телефона, теперь как я вижу, что моя оперативная память увеличивается с 2 до 2 + 85 (размер .jar).

Если я наберу adb shell cat / proc / meminfo этой командой из ADB, я увижу некоторую информацию о памяти.

Как я могу сделать то же самое из кода JAVA?


С наилучшими пожеланиями, ViTo Brothers.

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Если вы хотите узнать, сколько ОЗУ может использовать ваше приложение, посмотрите на ActivityManager.getMemoryClass .

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

Ограничение на приложение составляет от 16 (на G1) до 48 МБ. От общей оперативной памяти вашего устройства зависит, сколько памяти может иметь ваше приложение. Например, 48 МБ относятся к 1 ГБ ОЗУ.

Метод получения текущего использования памяти вашего приложения заключается в просмотре logcat. Это скажет что-то вроде

GC_CONCURRENT freed 1109K, 12% free 10115K/11463K, paused 5ms+2ms

означает, что вашей программе требуется до 11 МБ ОЗУ.

1 голос
/ 13 июня 2014

try this.it предоставит вам информацию о памяти, относящуюся к вашим приложениям, и об общем объеме памяти.

private void getProcessInfo () { PackageManager pm = this.getPackageManager ();

    MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
        activityManager.getMemoryInfo(memoryInfo);


    List<RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();



    Map<Integer, String> pidMap = new TreeMap<Integer, String>();
    for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses)
    {

        pidMap.put(runningAppProcessInfo.pid, runningAppProcessInfo.processName);

    }

    Collection<Integer> keys = pidMap.keySet();

    for(int key : keys)
    {

        ModelProcessInfo item=new ModelProcessInfo();
        int pids[] = new int[1];
        pids[0] = key;
        android.os.Debug.MemoryInfo[] memoryInfoArray = activityManager.getProcessMemoryInfo(pids);
        for(android.os.Debug.MemoryInfo pidMemoryInfo: memoryInfoArray)
        {


           Log.i(TAG, String.format("** MEMINFO in pid %d [%s] **\n",pids[0],pidMap.get(pids[0])));
           Log.i(TAG, " pidMemoryInfo.getTotalPrivateDirty(%d): " + pidMemoryInfo.getTotalPrivateDirty() + "\n");
            Log.i(TAG, " pidMemoryInfo.getTotalPss(): " + pidMemoryInfo.getTotalPss() + "\n");
           Log.i(TAG, " pidMemoryInfo.getTotalSharedDirty(): " + pidMemoryInfo.getTotalSharedDirty() + "\n");
            //pss->RAM used by your process

        }
       // activityManager.killBackgroundProcesses(pidMap.get(pids[0]));

    }

}
...