获取在Android中使用Application的总RAM大小

时间:2011-12-13 10:53:31

标签: java android memory memory-management ram

我想从我的Android手机 收集 一些 统计信息

当我开始申请时,我想知道以下内容:

  • 应用程序使用多少RAM。
  • 我的手机有多少可用内存。
  • 我的手机有多少RAM。

我必须做些什么才能收集统计数据,或者编写一些代码,或者也许 你使用一些提供此类信息或某些东西的应用程序 其他。我使用MAT,但它对我没有帮助,也许我会错过一些东西。

我想收集此类统计数据的主要原因是可能的应用程序 开始杀死其他应用程序以释放更多空间,如果可以的话 收集这些信息,我会理解一切。


被修改

例如我的应用程序使用库( helper.jar ),其大小为85 MB,我知道如果应用程序使用.jar,它会加载到手机的RAM中,现在我怎么看到我的RAM从2增加到2 + 85(大小为.jar)。

  

如果我从ADB输入 adb shell cat / proc / meminfo 这个命令,我会看到一些有关内存的信息。

如何从JAVA代码执行此操作?


最诚挚的问候,ViTo Brothers。

2 个答案:

答案 0 :(得分:2)

如果您想知道应用程序可以使用多少RAM,请查看ActivityManager.getMemoryClass

应用程序可以具有此内存限制,以便应用程序无法从其他应用程序中窃取所有内存。基本上你的应用程序不应该杀死其他应用程序。至少只要你不在你的应用程序中使用“大堆大小”选项。

每个应用程序的限制类似于16(在G1上)到48 MB。它在很大程度上取决于您的设备的总RAM,您的应用程序可以拥有多少内存。例如48 MB适用于1GB RAM。

获取应用当前内存使用情况的方法是查看logcat。它会说像

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

意味着你的程序需要11 MB的RAM。

答案 1 :(得分:1)

尝试这个。它将根据您的需要提供与您的应用程序和总内存相关的内存信息。

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]));

    }

}