【问题标题】:Android DefaultHttpClient REST apiAndroid DefaultHttpClient REST api
【发布时间】:2012-08-07 05:18:06
【问题描述】:

我实现了一个小型 android 应用程序,它通过 REST api 从服务器接收数据。每个 Activity 都包含一个 AsyncTask,它从服务器获取请求的数据。我将 DefaultHttpClient 与 ThreadSafeConnManager 一起使用,并且客户端是单例以便重用它。 当我测试应用程序并浏览活动时,有一个奇怪的问题:一切都在工作一段时间,突然接收数据需要越来越长的时间。如果我在活动中快速点击后退按钮,就会发生这种情况 - 我怀疑由于 asynctask 客户端连接尚未释放并且新任务无法连接。但是,如果我在每个 HttpGet 中创建一个新的客户端实例,也会发生同样的情况。

我遇到了这个问题,不知道出了什么问题。任何帮助表示赞赏。

谢谢,彼得兄弟

【问题讨论】:

    标签: android apache


    【解决方案1】:

    AsyncTasks 有点棘手,尤其是长时间运行的操作。 听起来您可能有几项任务试图满足您的要求。请记住,在此过程中的某个时间,您的客户会阻止。

    我建议您从 asyncTasks 转移到带有请求队列的线程服务。 如果您决定继续使用 asyncTasks,请确保您的取消已正确实施。

    希望对你有帮助

    【讨论】:

    • 嗨!我试图取消请求。 (不是所有活动)我应该把取消方法放在哪里?在 onPause 和 onDestroy 方法中?取消方法会释放连接吗?谢谢!
    【解决方案2】:

    这个问题已经讨论过了:

    Android HttpClient performance

    1. 为 connectionMgr 打开调试级别日志记录,检查生命周期事件
    2. 看看closeExpiredConnections()方法看看
    3. closeIdleConnections(long idleTimeout, TimeUnit tunit)

    我认为您应该更仔细地查看 connectionPool 中连接的生命周期,尤其是空闲和未使用的连接是否被关闭和/或重用。

    您可以查看 ThreadSafeConnManager 的 API/文档,也可以查看源代码。

    【讨论】:

    • 我试过但效果不佳。每次运行我都会在点击几下后获得无限的进度条。
    【解决方案3】:

    在 Nelson 建议的同一页面内,这是一个适合您的案例的方法。

    我会尝试对我的请求和线程执行器进行更多控制。请记住,Asynctask 的池是有限的。如果您的操作足够长,则请求将排队更大。

    http://joseluisugia.wordpress.com/2012/08/03/using-runnables-queues-and-executors-to-perform-tasks-in-background-threads-in-android/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2012-03-09
      • 2011-11-05
      • 2011-01-31
      • 2015-01-26
      • 2014-01-14
      • 1970-01-01
      相关资源
      最近更新 更多