聊天应用程序与REST应用程序 - 使用活动中的线程或服务中的线程?

时间:2010-06-12 14:57:42

标签: android

在Virgil Dobjanschi的演讲中,“开发Android REST客户端应用程序”(链接here),他说了一些令我惊讶的事情。包括:

  • 不要在您的活动产生的线程中运行http查询。而是与服务进行通信以执行它们,并将信息存储在ContentProvider中。使用ContentObserver通知更改。

  • 始终在服务中执行长时间运行的任务,从不在您的活动中执行。

  • 完成后停止服务。

我知道他在谈论REST API,但我正在尝试使其与我为应用程序提供的其他一些想法相符。我一直使用的API之一是使用长轮询进行聊天界面。有一个循环http查询,其中大部分都会超时。

这意味着,只要应用程序没有被操作系统杀死,或者用户没有专门关闭聊天功能,我将永远不会完成该服务,它将永远保持打开状态。这似乎不太理想。

长问题:

对于使用长轮询模拟推送和即时响应的聊天应用程序,最佳做法是使用服务执行HTTP查询,并将信息存储在ContentProvider中吗?

1 个答案:

答案 0 :(得分:2)

  

不要在线程中运行http查询   由您的活动产生。代替,   与服务沟通来做到这一点,   并将信息存储在   内容提供商。使用ContentObserver   收到变更通知。

我还没看过演示文稿,但我已经查看了幻灯片。我对拟议架构的ContentProvider部分持严重保留意见。

  

始终执行长时间运行的任务   服务,永远不在您的活动中。

每个人都有他们的宠物“永远”和“从不”的声明,包括我自己。我会毫不犹豫地把它放在“永远”类别中。使用Service作为长期运行任务的基础是一个很好的策略,但它也存在问题(例如,在屏幕轮换中,unbindService()会破坏Service之前的bindService()下一个{{1}}开始,如果没有其他绑定连接,如果你有一个复杂的应用程序,请留下连接簿记的gobs和gobs)。

  

对于使用long的聊天应用程序   轮询模拟推送和立即   回应,还是最好的做法   使用服务来执行HTTP   查询,并将信息存储在   ContentProvider?

这是一种做法。恕我直言,陪审团仍然非常关注这是否是最佳做法。