我需要AsyncTask
遍历大约 100,000 个数字并为每个数字检索数据。当提交 1,000 个参数时它工作正常,甚至可以处理 10,000 个参数,但是非常缓慢和滞后。首先,我提交了所有要执行的数字的数组,但注意到当我有时会得到大约 60,000 个数字时RejectedExecutionException
,但通常它只是退出我的应用程序而没有任何Exeptions
错误或错误。
这是这种情况下的代码:
for(int i = 0; i < 70000; i++){
numbers[i] = i;
}
new NetTask().execute(numbers);
在这种情况下还有 AsyncTask :
public class NetTask extends AsyncTask<Integer, String, String>
{
@Override
protected String doInBackground(Integer... params)
{
for (Integer number : params) {
try {
// DO NETWORK STUFF
publishProgress(number+" Successful");
} catch (Exception ex) {
publishProgress(number+" Failed");
}
}
return "";
}
}
然后我在某处读到,如果需要执行具有这样数量参数的任务,那么最好在单个 AsyncTask 中处理它,例如通过循环每个值,因为我之前使用的代码创建了大量的 AsyncTask。所以我尝试提交由“:”分隔的单个字符串中的数字,然后在 AsyncTask 中将它们切回单个数字并使用它们执行任务,但仍然得到与之前尝试类似的结果。
这是本例中的 AsyncTask:
public class NetTask extends AsyncTask<String, String, String>
{
@Override
protected String doInBackground(String... params)
{
for (String line : params) {
String[] numbers = line.split(":");
for (int i = 0; i < numbers.length; i++) {
int number = Integer.parseInt(numbers[i]);
try {
// DO NETWORK STUFF
publishProgress(number+" Successful");
} catch (Exception ex) {
publishProgress(number+" Failed");
}
}
}
return "";
}
有没有人知道任何更好和更有效的方法来实现我所追求的目标?