package AndroidApi;
import android.util.Log;
class Monitoring implements Runnable
{
public void run()
{
while (!Thread.currentThread().isInterrupted())
{
try
{
Thread.sleep(100);
} catch (InterruptedException s)
{
Thread.currentThread().interrupt();
}
AndroidDebug.printVaryMemory();
}
}
}
public class AndroidDebug
{
private static boolean m_bIsDebug = false;
/**
* 设置调试模式
*
* @param bIsDebug
*/
public static void setMode(boolean bIsDebug)
{
m_bIsDebug = bIsDebug;
}
/**
* 是否调试模式
* @return
*/
public static boolean isDebug()
{
return m_bIsDebug;
}
/**
* 打印信息
*
* @param strTxt
*/
public static void println(String strTxt)
{
if (m_bIsDebug)
{
System.out.println(strTxt);
}
}
/**
* 打印信息
*
* @param strTxt
*/
public static void Log(String strTag, String strTxt)
{
if (m_bIsDebug)
{
Log.i(strTag,strTxt);
}
}
/**
* 强制回收垃圾,可用于检测析构函数,检测未使用对象是否有
*/
public static void gc()
{
if (m_bIsDebug)
{
System.gc();
}
}
/**
* 打印堆总量
*/
public static void printTotalMemory()
{
Runtime r = Runtime.getRuntime();
AndroidDebug.println("Total memory is :" + r.totalMemory());
}
/**
* 打印堆剩余量
*/
public static void printFreeMemory()
{
gc(); // 执行强制回收以获得准确的剩余量
Runtime r = Runtime.getRuntime();
AndroidDebug.println("Free memory is :" + r.freeMemory());
}
/**
* 打印堆变化量
*/
static long longPre = 0;
public static void printVaryMemory()
{
gc(); // 执行强制回收以获得准确的剩余量
Runtime r = Runtime.getRuntime();
long longNow = r.freeMemory();
if (longNow > longPre)
{
AndroidDebug.println("Free memory -> :" + (longNow - longPre));
longPre = longNow;
} else if (longNow < longPre)
{
AndroidDebug.println("Free memory <- :" + (longPre - longNow));
longPre = longNow;
}
}
/**
* 监控内存
*
* @param bIsOpen
*/
private static Thread m_pThread = null;
public static void setMonitore(boolean bIsOpen)
{
if (bIsOpen)
{
if (null == m_pThread)
m_pThread = new Thread(new Monitoring());
m_pThread.setDaemon(true);
m_pThread.start();
}
else
{
if (null != m_pThread)
{
m_pThread.interrupt();
m_pThread = null;
}
}
}
}