В моем приложении Android я использую несколько AsyncTask, используя THREAD_POOL_EXECUTOR, который заставляет задачи запускаться параллельно. Когда-то приложение зависает. Ниже приведен код, который я использую.
- Не могли бы вы дать мне знать, как правильно настроить, чтобы избежать каких-либо проблем с зависанием?
-
Как найти точку, в которой приложение висит?
new fetchInitialCoinsParallel().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url); prefCoinList = getPrefCoin(); if(prefCoinList.size()>0){ for(int i=0;i<prefCoinList.size();i++){ new fetchAltCoinsParallel().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url); } } public class fetchAltCoinsParallel extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { } protected String doInBackground(String... params) { try { InputStream is = getDataFromURL(params[0]); if(is!=null){ BufferedReader br = new BufferedReader(new InputStreamReader(is)); synchronized(this){ brList.add(br); } }else{ prefCoinNotLoadedTimeOutCount=prefCoinNotLoadedTimeOutCount+1; } if(brList.size()==prefCoinList.size()-prefCoinNotLoadedTimeOutCount){ try { loadAltCoins(getAltCoinDataParallel()); } catch (IOException e) { e.printStackTrace(); } maingame.dataReady=true; } } catch (IOException e) { e.printStackTrace(); } return null; } protected void onPostExecute(String params) { } protected void onProgressUpdate(String... progress) { }
}