我想从我的Android手机 收集 一些 统计信息 。
当我开始申请时,我想知道以下内容:
我必须做些什么才能收集统计数据,或者编写一些代码,或者也许 你使用一些提供此类信息或某些东西的应用程序 其他。我使用MAT,但它对我没有帮助,也许我会错过一些东西。
我想收集此类统计数据的主要原因是可能的应用程序 开始杀死其他应用程序以释放更多空间,如果可以的话 收集这些信息,我会理解一切。
例如我的应用程序使用库( helper.jar ),其大小为85 MB,我知道如果应用程序使用.jar,它会加载到手机的RAM中,现在我怎么看到我的RAM从2增加到2 + 85(大小为.jar)。
如果我从ADB输入 adb shell cat / proc / meminfo 这个命令,我会看到一些有关内存的信息。
如何从JAVA代码执行此操作?
最诚挚的问候,ViTo Brothers。
答案 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]));
}
}