0

我正在使用以下代码

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

4

2 回答 2

0

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

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

于 2013-05-21T05:25:26.190 回答
0

这听起来更像是一个线程而不是任务——我会启动一个线程,然后让它在后台一次一个地通过这些联系人。如果您希望它并行处理,您甚至可以将数据集划分为多个块并为每个块创建 1 个线程(尽管除非 linux 调度程序将这些线程分配给不同的内核,否则您实际上不会以这种方式实现加速,所以我除非绝对需要,否则我不确定我会打扰,然后我会测量以确保它有效)。

于 2013-05-21T05:28:05.087 回答