安卓应用:为什么它在多个http帖子上超时



我将Nexus 5更新为Lollipop,现在我的Android应用程序遇到了这个错误:

我的

应用程序从我的网站 API 获取它的内容。为此,该应用程序联系API"同步",该API"响应新的或更新的项目列表。应用读取此列表,循环遍历不同的项目,并在 AsyncTask 中启动httppost,以从 API 加载每个项目的内容。为了能够取消更新过程,我只在上一个完成后开始下一个httppost

较低的Android版本上没有问题,但是当我开始更新时,使用棒棒糖时,前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 的更多代码,我只希望错误在上面的代码中:)

更新 21.12.2014在评论中进行了一些讨论后,我们发现,AsyncTask(其中httppost(中的sleep(300)解决了这个问题。所以问题是,太多的httppost到达服务器并阻止了我的ip,sleep这是减少;-(

更新 1.1.2015我没有发现问题是基于服务器还是在我的应用程序中。但是现在我使用GoogleVolley作为我的API,它工作得很好!

阅读AsyncTask'threadpoolexecutor'上的文档

尝试确定平台 API 升级是否以某种方式改变了池的默认策略以及 asyncTask 使用的线程数和执行器?

如果您想要控制自己的客户端池化 http 执行器的替代方法,请查看此处的示例,例如使用 android 处理程序运行您自己的异步 http 队列框架。

相关内容

  • 没有找到相关文章

最新更新