我有一个AsyncTask的代码,它位于一个单独的Java文件(不是内部类)上:
public class LastPriceRetrieval extends AsyncTask<String,Integer,String> {
private String itemName;
public LastPriceRetrieval() {
Utils.incAsync();
}
protected String doInBackground(String... strings) {
try {
itemName = strings[0];
URL url = new URL("<url>?q=" + itemName);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
InputStream in = conn.getInputStream();
StringBuilder stringBuilder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
String body = stringBuilder.toString();
reader.close();
conn.disconnect();
if (!body.contains("\"price\"")) return "0";
else {
body = body.substring(body.indexOf("\"price\""));
body = body.substring(body.indexOf("=\"") + 2);
return body.substring(0, body.indexOf("\"") - 1);
}
} catch (Exception e) {
return "0";
}
}
protected void onPostExecute(String resLastPrice) {
if (Double.valueOf(resLastPrice) != 0) {
Utils.db.setLastPrice(itemName, Double.valueOf(resLastPrice));
}
Utils.decAsync();
}
}
Utils类如下(同样是一个文件,而不是内部类)
public class Utils {
private static int asyncs = 0;
private static db = null;
public static synchronized void incAsync() {
asyncs++;
}
public static synchronized void decAsync() {
asyncs--;
}
public static int getAsyncs() {
return asyncs;
}
}
我将以上asynctask并行调用60次(不同的itemName)
new LastPriceRetrieval().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, itemName);
Utils.db是一个sqlite类,我在MainActivity的onCreate中实例化。当60个asynctasks正在运行时我什么都不做,只显示一个ProgressDialog并等待它完成。
我运行一个内存监视器,当所有60个asynctasks完成后,应用程序需要比以前更多的内存,这意味着某些东西正在泄漏,不知道为什么或什么。我错过了什么?
答案 0 :(得分:0)
在尝试测试内存泄漏之前,可能会调用gc()吗?