@cnhappier
2015-08-06T11:04:21.000000Z
字数 1373
阅读 919
public static long getRuntimeAvailableMemory()
{
MemoryInfo memoryInfo = new MemoryInfo();
ActivityManager activityManager = (ActivityManager) ContextManager.systemService(Context.ACTIVITY_SERVICE);
activityManager.getMemoryInfo(memoryInfo);
return memoryInfo.availMem;
}
因为memoryInfo.totalMen,有API兼容性问题。
所以可以从/proc/meminfo,内获取
public static long getTotalMemory()
{
String memInfoFile = "/proc/meminfo";
long totalMemory = 0;
FileReader memoryInfoReader = null;
BufferedReader bufferedReader = null;
try
{
memoryInfoReader = new FileReader(memInfoFile);
bufferedReader = new BufferedReader(memoryInfoReader, 4096);
// read the first line of MemTotal:
String content = bufferedReader.readLine();
while(content!=null)
{
if(content.startsWith("MemTotal:"))
{
String[] arrayInfo = content.trim().split("\\s+");
totalMemory = Long.parseLong(arrayInfo[1]) * 1024;
}
content = bufferedReader.readLine();
}
}
catch (Exception e)
{
}
finally
{
if (bufferedReader != null)
{
try
{
bufferedReader.close();
}
catch (IOException e)
{
}
}
if (memoryInfoReader != null)
{
try
{
memoryInfoReader.close();
}
catch (IOException e)
{
}
}
}
return totalMemory;
}
到底使用memoryInfo和读取/proc/meminfo,有什么区别呢?
答案是没区别,memoryinfo就是读取的/proc/meminfo的内容.....
具体有个注意就是:available = MemFree+Cached
MemFree: LowFree与HighFree的总和,被系统留着未使用的内存。
Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于diskcache minus SwapCache)
代码在这里:android_util_Process.cpp
ActivityManager.MemoryInfo and /proc/meminfo file have different values