我有一个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
当时只能有一个连接吗?如果是这样,我该如何进行多重连接?
答案 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
。