天天看點

AsyncTask線程數超限問題

      在我們的APP使用中發現頻繁點選切換tab會導緻APP崩潰, 分析log發現由于在每次點選tab時會建立一個AsyncTask去更新資料, 由于沒有做重入保護,快速頻繁切換點選tab會生成大量AsyncTask的線程,同時由于資料重新整理過程中會生成大量AsyncTask線程更新頁面清單中的很多圖檔,進而導緻線程數超出系統最大線程數量産生RejectedExecutionException拒絕添加線程異常而使APP崩潰。比較簡單的解決辦法是點選tab重新整理資料時設立一個任務是否完成标志,建立AsyncTask重新整理資料任務時檢測上次任務是否完成,如果已建立任務并且正在執行則不建立新任務,如果沒有任務執行則建立新任務去重新整理資料。同時更新圖檔時判斷從雲端擷取到的圖檔url是否有變化,有變化才建立新的AsyncTask線程去下載下傳更新圖檔。