0

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

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

谢谢,彼得兄弟

4

3 回答 3

0

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

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

希望这可以帮助

于 2012-04-14T15:27:09.280 回答
0

这是您的案例的正确方法,在 Nelson 建议的同一页面内。

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

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

于 2012-08-06T21:18:06.517 回答
0

这个问题已经讨论过:

Android HttpClient 性能

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

我认为您应该更仔细地查看来自您的 connectionPool 的连接的生命周期,特别是空闲和未使用的连接被关闭或重用。

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

于 2012-04-14T15:30:03.370 回答