android內存檢測
來源:程序員人生 發布時間:2014-11-11 09:02:51 閱讀次數:3243次
/**
* 開啟線程檢測軟件可用內存情況,軟件退出后, 調用System.exit(0)該線程才會停止 *
*
* @param sleep
* 每隔1段時間檢測內存
* @param standard
* 內存超過量少比例報警
*/
public static void memoryWatch(final int sleep, final int standard)
{
if (sleep <= 0)
{
Log.e(TAG, "memoryWatch, invalid sleep = 0!");
return;
}
if (standard <= 0 && standard > 100)
{
Log.e(TAG, "memoryWatch, invalid standard percent = " + standard);
return;
}
new Thread(new Runnable()
{
@Override
public void run()
{
Log.d(TAG, "memoryWatch, start thread!");
while (true)
{
long divisor = 1024 * 1024;
long maxMem = Runtime.getRuntime().maxMemory();
long totalMem = Runtime.getRuntime().totalMemory();
long freeMem = Runtime.getRuntime().freeMemory();
int percent = (int) (totalMem * 100 / maxMem);
Log.d(TAG, "memoryWatch" + ", app maxMem = " + maxMem
/ divisor + "M, totalMem = " + totalMem / divisor
+ "M, freeMem = " + freeMem / divisor
+ "M, percent = " + percent);
if (standard <= percent)
{
if (freeMem / divisor <= 2)
{
Log.e(TAG, "memoryWatch" + ", app maxMem = "
+ maxMem / divisor + "M, totalMem = "
+ totalMem / divisor + "M, freeMem = "
+ freeMem / divisor + "M, percent = "
+ percent);
}
else if (freeMem / divisor >= totalMem / (divisor * 2))
{
Log.e(TAG, "memoryWatch" + ", app maxMem = "
+ maxMem / divisor + "M, totalMem = "
+ totalMem / divisor + "M, freeMem = "
+ freeMem / divisor + "M, percent = "
+ percent + "%"
+ ", reset memory warn flag = true!");
}
}
try
{
Thread.sleep(sleep);
}
catch (InterruptedException e)
{
Log.e(TAG, "memoryWatch, thread sleep exception : " + e);
}
}
}
}).start();
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈