我正在使用以下代码
private void getOnlineConnections()
{
for (int i = 0; i < contacts.size(); i++)
{
final Persons person = contacts.get(i);
String queryString = null;
try {
queryString = String.format(Constants.GET_ONLINE_URL,
URLEncoder.encode(person.myId, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
ResponseCallback callback = new ResponseCallback()
{
@Override
public void onSuccess(String response)
{
response = response.trim();
}
@Override
public void onFailure(String exception)
{}
};
new MyAsyncTask(queryString, callback);
}
}
MyAsyncTask是一个AsyncTask。
现在联系人数量可能超过128或超过TheadPoolExecutor的限制。
如何增加此限制,以免RejectExecutionError
崩溃。
答案 0 :(得分:0)
如果您使用的是API级别11或更高级别,请创建自己的线程池并使用executeOnExecutor()
。
如果您支持较旧的设备,请不要使用AsyncTask
。创建自己的线程池并使用其他方法(例如runOnUiThread()
)安排在主应用程序线程上完成工作。
答案 1 :(得分:0)
这听起来更像是一个线程而不是一个任务 - 我从一个线程开始,只是让它在后台一次突破这些联系人。你甚至可以将数据集分成多个块,如果你想要并行处理,每个块创建一个线程(虽然除非linux调度程序将这些线程分配给不同的内核,否则你实际上不会以这种方式实现加速,所以我是不确定我会打扰,除非它绝对需要,然后我会测量以确保它有效。