在循环中运行异步任务时RejectExecutionError

时间:2013-05-21 05:24:03

标签: java android eclipse

我正在使用以下代码

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崩溃。

2 个答案:

答案 0 :(得分:0)

如果您使用的是API级别11或更高级别,请创建自己的线程池并使用executeOnExecutor()

如果您支持较旧的设备,请不要使用AsyncTask。创建自己的线程池并使用其他方法(例如runOnUiThread())安排在主应用程序线程上完成工作。

答案 1 :(得分:0)

这听起来更像是一个线程而不是一个任务 - 我从一个线程开始,只是让它在后台一次突破这些联系人。你甚至可以将数据集分成多个块,如果你想要并行处理,每个块创建一个线程(虽然除非linux调度程序将这些线程分配给不同的内核,否则你实际上不会以这种方式实现加速,所以我是不确定我会打扰,除非它绝对需要,然后我会测量以确保它有效。