请注意:这是关于我的应用的具体问题,但可能对其他新手开发者有用
我无法找到“内存泄漏”的原因。
我注意到在调试此泄漏时,简单的方向更改使用0.01mb
内存。
下面这段代码占用0.04mb内存
//global
WifiManager wifiManager;
List<WifiConfiguration> wifiConfigList;
WifiInfo wifiInfo;
private void refreshWifiInfo() {
wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
wifiConfigList = wifiManager.getConfiguredNetworks();
wifiInfo = wifiManager.getConnectionInfo();
}
还有一些其他的方法,都在一个线程中运行。该线程休眠并执行1000ms
,每个循环的该线程的总使用量为+/- 0.09mb-0.11mb。
注意: 所有这些“测试”都没有输入,没有额外的对话框,弹出窗口,监视器,只是线程扫描和显示结果。没有使用位图/图像/图形!
随着时间的推移,记忆力不断增加到OutOfMemory Exception
我试过转储内存堆并使用Eclipse Memory Analyzer进行分析,它怀疑内存泄漏是arrays of bytes containing periods
我跑的另一次扫描在短时间内显示massive memory usage(+/- 1m30s)
我的主题包含:
t = new Thread(new Runnable() {
public void run() {
handler = new Handler(context.getMainLooper());
while (!bStopThread) {
System.gc();
ThreadCounter++;
handler.post(new Runnable() {
@Override
public void run() {
if (bSafe) {
initWiFiArrays();
CreateSetAdapter();
threadRefresh.setText("# Refreshed Times : " + String.valueOf(ThreadCounter));
writeResultsToFile();
} else
stopScan();
}
});
try {
Thread.sleep(scanInterval);
} catch (Exception x) {
x.printStackTrace();
}
}
}
});
t.start();
查看帖子开头的代码,调用:
refreshWifiInfo();
单独使用0.04mb,这似乎不正常!
没有上下文被发送到其他类,没有声明静态/最终变量,尽管我确实有全局定义的TextViews,EditTexts,一个按钮,只有在必要的地方才能完成。
我怎么能检测到这些内存泄漏,因为我不知所措?
P.S。我整天都在这里,仍然没有找到任何东西