在Virgil Dobjanschi的演讲中,“开发Android REST客户端应用程序”(链接here),他说了一些令我惊讶的事情。包括:
不要在您的活动产生的线程中运行http查询。而是与服务进行通信以执行它们,并将信息存储在ContentProvider中。使用ContentObserver通知更改。
始终在服务中执行长时间运行的任务,从不在您的活动中执行。
完成后停止服务。
我知道他在谈论REST API,但我正在尝试使其与我为应用程序提供的其他一些想法相符。我一直使用的API之一是使用长轮询进行聊天界面。有一个循环http查询,其中大部分都会超时。
这意味着,只要应用程序没有被操作系统杀死,或者用户没有专门关闭聊天功能,我将永远不会完成该服务,它将永远保持打开状态。这似乎不太理想。
长问题:
对于使用长轮询模拟推送和即时响应的聊天应用程序,最佳做法是使用服务执行HTTP查询,并将信息存储在ContentProvider中吗?
答案 0 :(得分:2)
不要在线程中运行http查询 由您的活动产生。代替, 与服务沟通来做到这一点, 并将信息存储在 内容提供商。使用ContentObserver 收到变更通知。
我还没看过演示文稿,但我已经查看了幻灯片。我对拟议架构的ContentProvider
部分持严重保留意见。
始终执行长时间运行的任务 服务,永远不在您的活动中。
每个人都有他们的宠物“永远”和“从不”的声明,包括我自己。我会毫不犹豫地把它放在“永远”类别中。使用Service
作为长期运行任务的基础是一个很好的策略,但它也存在问题(例如,在屏幕轮换中,unbindService()
会破坏Service
之前的bindService()
下一个{{1}}开始,如果没有其他绑定连接,如果你有一个复杂的应用程序,请留下连接簿记的gobs和gobs)。
对于使用long的聊天应用程序 轮询模拟推送和立即 回应,还是最好的做法 使用服务来执行HTTP 查询,并将信息存储在 ContentProvider?
这是一种做法。恕我直言,陪审团仍然非常关注这是否是最佳做法。