我将Nexus 5更新为Lollipop,现在我的Android应用程序出现了这个错误:
我的应用程序从我的网站api获取它的内容。为此,应用程序会联系API“同步”,它会响应新的或更新的项目列表。应用程序读取此List,循环遍历不同的Items并在AsyncTask中启动httppost
以从API为每个Item加载内容。
为了能够取消更新过程,我只在前一个完成时开始下一个httppost
。
在较低的Android版本上没有问题,但是当我开始更新时使用Lollipop正常加载前4个项目(并且快速:50ms)但是在下面的代码response = httpClient.execute(httppost);
期间第五个卡住:
HttpPost httppost;
try {
httppost = new HttpPost(url);
} catch (IllegalArgumentException e) {
Log.e(Globals.TAG_API, "Wrong URL");
throw e;
}
HttpResponse response;
HttpParams httpParams = new BasicHttpParams();
httpParams.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpConnectionParams.setTcpNoDelay(httpParams, false);
HttpConnectionParams.setConnectionTimeout(httpParams, 30000);
HttpConnectionParams.setSoTimeout(httpParams, 30000);
HttpClient httpClient = new DefaultHttpClient(httpParams);
HttpEntity entity;
try {
Log.d(Globals.TAG,"Start");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));
response = httpClient.execute(httppost);
Log.d(Globals.TAG,"Stop");
entity = response.getEntity();
}
30秒后,超时取消连接。 同样重要的是:在这30秒内,整个主页无法再访问。我认为该错误不在API中,因为使用旧版Android的设备使用相同的API ...
请评论,如果您需要API或APP中的更多代码,我只希望该错误在上面的代码中:)
更新2014年12月21日
在评论中进行了一些讨论之后,我们发现,AsyncTask中的sleep(300)
(其中httppost
)解决了这个问题。所以问题是,太多的httppost到达服务器并阻止我的ip,sleep
这会减少; - )
更新1.1.2015 我没有发现问题是基于服务器还是在我的应用程序中。但现在我使用GoogleVolley作为我的API,它的工作非常棒!