gpt4 book ai didi

java - Android Java - ThreadPoolExecutor$AbortPolicy

转载 作者:行者123 更新时间:2023-12-01 12:32:39 25 4
gpt4 key购买 nike

我收到以下错误:

09-13 06:27:02.268: E/AndroidRuntime(476):  at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1961)
09-13 06:27:02.268: E/AndroidRuntime(476): at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:794)
09-13 06:27:02.268: E/AndroidRuntime(476): at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1315)
09-13 06:27:02.268: E/AndroidRuntime(476): at android.os.AsyncTask.execute(AsyncTask.java:394)

下面是我的代码:

private class DownloadVerses extends AsyncTask<String, Void, String> {

@Override
protected String doInBackground(String... params) {

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
String resultString = "";
try {
boolean resultBoolean = Utils.downloadTurboVerseFile(params[0]);

if(resultBoolean){
int progressPercentage = Integer.parseInt(params[2].substring(0,params[2].indexOf(".")));
resultString = "Downloading: "+params[1];

}
else{

resultString = "ERROR Downloading: "+params[1];
this.doInBackground(params);
}
} catch (Exception e) {
Thread.interrupted();
String exceptionString = e.toString();
}

return resultString;
}

@Override
protected void onPostExecute(String result) {
if(result.contains("ERROR")){
downloading.setTextColor(Color.parseColor("#f05036"));

}
else{
downloading.setTextColor(Color.parseColor("#79a1ad"));

}

downloading.setText(result);

if(checkIfVersesDownloaded()){

downloadProgressBar.setVisibility(View.INVISIBLE);
downloading.setText("Verses Have Been Downloaded.");
homeButton.setEnabled(true);
homeButton.setVisibility(View.VISIBLE);

}



}

@Override
protected void onPreExecute() {}

@Override
protected void onProgressUpdate(Void... values) {}
}

我正在执行这样的代码:

while(i < verseTitles.size()){      
new DownloadVerses().execute(verseMp3s.get(i), verseTitles.get(i),progressString);
i++;
}

我认为可能有一个简单的解决方案,涉及向我的 DownloadVerses 私有(private)类添加一些代码?

最佳答案

您无法在这样的循环中创建大量 AsyncTask。您可以创建略多于 128 的数量,然后才会出现您所看到的错误。

您的选择是:

  1. 不要为每节经文创建单独的任务。例如,有一项任务可以处理所有经文。

  2. 提供您自己的自定义 ThreadPoolExecutor,它具有更大的待处理任务队列,并将其与 AsyncTask 上的 executeOnExecutor() 一起使用.

  3. 根本不要使用AsyncTask,而是使用其他后台线程解决方案。

关于java - Android Java - ThreadPoolExecutor$AbortPolicy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25823406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com