Android 聊天应用与REST应用-在活动中使用线程还是在服务中使用线程?

Android 聊天应用与REST应用-在活动中使用线程还是在服务中使用线程?,android,Android,在Virgil Dobjanschi的演讲“开发Android REST客户端应用程序”(link)中,他说了一些令我惊讶的事情。包括: 不要在活动生成的线程中运行http查询。相反,与服务通信以完成这些操作,并将信息存储在ContentProvider中。使用ContentObserver以获得更改通知 始终在服务中执行长时间运行的任务,而不是在活动中 完成后停止服务 我知道他说的是RESTAPI,但我正试图让它与我对应用程序的其他想法相适应。我一直在使用的一个API对他们的聊天界面使用长

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

  • 不要在活动生成的线程中运行http查询。相反,与服务通信以完成这些操作,并将信息存储在ContentProvider中。使用ContentObserver以获得更改通知

  • 始终在服务中执行长时间运行的任务,而不是在活动中

  • 完成后停止服务

我知道他说的是RESTAPI,但我正试图让它与我对应用程序的其他想法相适应。我一直在使用的一个API对他们的聊天界面使用长轮询。有一个循环http查询,其中大部分将超时

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

长问题短:

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

不要在线程中运行http查询 由你的活动产生的。相反 与服务部门沟通以完成这些任务, 并将信息存储在 内容提供者。使用ContentObserver 收到变更通知

虽然我已经看过幻灯片,但我还没有看过演示文稿。我对拟议架构的
ContentProvider
部分有严重保留

始终在一个环境中执行长时间运行的任务 服务,永远不要在你的活动中

每个人都有他们最喜欢的“总是”和“从不”陈述,包括我自己。我不愿意把它归入“永远”一类。使用
服务
作为长期运行任务的主基地是一个不错的策略,但它也有它的问题(例如,在屏幕旋转中,
unbindService()
将在下一个
bindService()之前销毁
服务
如果没有其他绑定的连接,就会启动,如果你有一个复杂的应用程序,就会留下一大堆连接记账)

对于使用长消息的聊天应用程序 轮询以模拟推送和即时消息 回应,这仍然是最佳实践吗 使用服务执行HTTP 查询,并将信息存储在 内容提供者


这是一种实践。伊姆霍,陪审团仍然非常清楚这是否是一种最佳做法。

我认为有服务是必要的,因为你的活动可能会被扼杀。