【问题标题】:Using AsyncTask for an HTTP GET on android causes a long delay in sending data在 android 上使用 AsyncTask 进行 HTTP GET 会导致发送数据的长时间延迟
【发布时间】:2015-07-07 17:41:47
【问题描述】:

我正在使用 AsyncTask 在 android 上执行 HTTP GET。它会导致将我的数据发送到 URL 的时间很长。有没有办法解决这个问题或其他可以使用的方法?

这是我的代码: 类 RequestTask 扩展 AsyncTask{

    @Override
    protected String doInBackground(String... uri) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response;
        String responseString = null;

        HttpParams httpParameters = httpclient.getParams();
        HttpConnectionParams.setTcpNoDelay(httpParameters, true);

        try {
            response = httpclient.execute(new HttpGet(uri[0]));
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                responseString = out.toString();
                out.close();
            } else{
                //Closes the connection.
                response.getEntity().getContent().close();
                throw new IOException(statusLine.getReasonPhrase());
            }
        } catch (ClientProtocolException e) {
            //TODO Handle problems..
        } catch (IOException e) {
            //TODO Handle problems..
        }
        return responseString;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        //Do anything with response..
    }
}

这是电话:

new RequestTask().execute("http://10.10.10.211:9081/?modelname=model1&sourcedata=" + values[1]);

【问题讨论】:

  • causes a long delay 定义它,并解释 a/ 你如何观察它和 b/ 是什么让你认为它与使用异步任务有关
  • 您的任务是否可能实际上并没有异步运行?尝试通过 task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) 在执行器上运行它;您甚至可能想要实现类似 stackoverflow.com/a/12160159/1426565 的东西来帮助您完成想要独立运行的其他任务
  • 长时间延迟是指使用我的安卓设备时需要 9-10 秒才能得到响应。当我使用 java 应用程序在我的计算机上运行相同的请求时,响应几乎是即时的。

标签: android android-asynctask http-get


【解决方案1】:

我建议您使用Volley 进行此方法。我在我的项目中使用它,我从来没有遇到过任何问题。

【讨论】:

  • Volley 解决了这个问题,而且使用起来比我原来的方法容易得多。
  • 是的,这很容易,不是吗?我很高兴能帮助你。 :)
【解决方案2】:

这不一定能解决您的问题,但我真的建议使用 Retrofit 从 Android 进行 REST 调用(甚至更好地与 RxJava 一起使用)。在任何一种情况下,您都不应该看到在后台线程中发出请求的事实有太多延迟。

【讨论】:

    【解决方案3】:

    除了网络问题,我想不出还有什么理由会延迟!

    处理 Http 网络调用很痛苦,需要做很多工作来处理它,但是,为什么要重新发明轮子呢?!

    那里有一些图书馆可以为我们处理所有杂乱无章的东西,请使用其中一个。

    我在我的项目中使用了OKHTTP,效果还不错。

    This 是 CommonsWare 的回答,

    请阅读它,它将证明非常有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      相关资源
      最近更新 更多