DefaultHttpClient阻塞不同的线程

时间:2015-01-13 13:10:56

标签: android multithreading apache-httpclient-4.x

我有一个Android应用程序,后台服务将信息发送到HTTP服务器。在前台我有一个Activity来获取UI的信息。两者都使用从doSending继承的AsyncTask类来进行实际通信。

在这个doSending类中,我实例化一个DefaultHttpClient来运行通信。但是,似乎“前景”通信(由用户触发)被“后台”通信阻止(由计时器触发)。

private class doSending extends AsyncTask<Telegram, Integer, Long> {
    [..]
    @Override 
    protected Long doInBackground(Telegram... telegrams) {
       [..]
       HttpClient c = new DefaultHttpClient();
       [..]
       c.execute();
    }
    [..]
}

这样叫:

Telegram t = new Telegram();
new doSending().execute(t);

{app}范围内DefaultHttpClient当时只能有一个连接吗?如果是这样,我该如何进行多重连接?

1 个答案:

答案 0 :(得分:0)

你确定它是HttpClient而不是只能有一个正在运行的实例的AsyncTask吗?如果我没记错的话,AsyncTask的默认线程池(不幸的是)有一个与之关联的线程,这意味着在任何给定时间只能运行一个活动的AsyncTask。

要修复,你可以试试这个:

asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); 

请查看此链接以供参考:http://commonsware.com/blog/2012/04/20/asynctask-threading-regression-confirmed.html

特别是这句话:If your android:targetSdkVersion is set to 13 or higher, and you are running on Android 4.x or higher, AsyncTask will use an Executor that executes only one task at a time