DefaultHttpClient 阻塞不同的线程

DefaultHttpClient blocking different threads

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

在这个doSendingclass中,我实例化了一个DefaultHttpClient到运行的通讯。但是,"foreground" 通信(由用户触发)似乎被 "background" 通信(由计时器触发)阻止。

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);

DefaultHttpClient 在应用程序范围内一次只能有一个连接是真的吗?如果是这样,我该如何进行多连接?

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

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

asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); 

看看这个 link 作为参考: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.