[英]Could this Asynctask cause OutOfMemory on Android?
我經常使用AsyncTask
因為AsyncTask
有 ThreadPool,
所以即使線程無限增長,內存也會被管理以避免壓力。
但是,最近發生OutOfMemoryError: pthread_create (1040KB stack) failed: Try again
所以,我發現了可疑的部分。
public static class getPubIpAddress extends AsyncTask<Void, Void ,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... params) {
try {
URL pubIp = new URL("https://myserver.co.kr/ipaddr.php");
BufferedReader in = BufferedReader(new InputStreamReader(
pubIp.openStream()));
String pub = in.readLine();
} catch (Exception e) {
e.printStackTrace();
}
return pub;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}
這個異步任務獲取公共IP。 並在網絡連接時執行,更改網絡。
這個異步任務會導致android內存不足嗎?
謝謝:)
我認為問題可能是 asynctask 一次又一次地運行。 您必須檢查 asyncTask 是否已完成,然后嘗試重新運行它。 檢查這個帖子。 Android,AsyncTask,檢查狀態?
第二種方法您可以在應用程序級別設置一個標志,以檢查 AsyncTask 是否正在運行,然后不要再次啟動 AsyncTask,如果沒有運行,則啟動您的 AsnckTask。
在應用程序級別的類把這個變量
public static boolean alreadyRuning = false;
還有這個 getter 和 setter
public static boolean isRunning() {
return alreadyRuning;
}
public static void setRunning(boolean alreadyRunning) {
this.alreadyRuning= alreadyRunning;
}
或者您可以在完成后關閉緩沖區。
BufferedReader in = BufferedReader(new InputStreamReader(
pubIp.openStream()));
try {
String pub = in.readLine();
} finally {
in.close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.