簡體   English   中英

這個 Asynctask 會導致 Android 上的 OutOfMemory 嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM