在Android中,我有一个套接字与服务器保持实时通信。该应用程序套接字由一个服务控制,该服务在启动和/或应用程序发出请求时启动。
因为我不能依赖Google PlayStore,所以我完全可以手动控制推送消息的发送和接收。
每当新的推送消息从服务器到达时,套接字服务发送本地广播消息,侦听活动可以在那里执行自己的操作。如果没有找到任何活动,则会向用户发出默认的android通知,表示'ap您有{n}新消息‘.
这有其稳定性问题(例如,在内存不足时,操作系统可以关闭该服务),但它还可以。
现在,请考虑以下内容:
我有多个活动来监听-for和显示未读消息的计数。
每个活动可以在前台,但也可以在内存中,当用户回按和返回1活动。因此,在理论上,可能会出现这样的情况:您希望同时更新不同的/多个活动。这避免了当用户返回到“savedInstance”时,必须“重新加载”来自服务器的未读消息。所以我认为广播模式效果最好。
什么是保持未读消息全局跟踪的最佳实践,同时最小化每个活动实例的服务器行程:
任何有经验的开发人员的感谢都是非常感谢的!
发布于 2015-07-24 13:33:25
第三个选择是可以的。不知道overkill到底在哪里。显然,您不应该在每次引导或套接字重新连接上下载所有未读消息。最重要的经验法则是在应用程序真正需要的时候加载数据。关于我是如何开发同一款应用程序的几分钟:
Service处理连接、断开、发送数据(消息)和接收数据。Notification manager,它接收来自SocketService的事件。它保存来自服务器的新数据,并决定应该发送哪个广播通知。A,那么昨天更新了chat A,但是最近从服务器接收到的数据说,chatA是几秒钟前更新的,您需要广播像chat A has been updated since last connection这样的事件并保存更新日期。如果有任何以某种方式显示聊天A的活动,它会加载(通过http或其他方式)新数据。last messages。这个应用程序只是比较本地保存的last messages和刚收到的。如果有新的,应用程序再次广播事件,如there is unread message/messages from user x。如果有可见的活动,显示更新的聊天,它会更新数据,否则应用程序会显示通知。
因此,接下来是处理未读消息的基本流程:连接到服务器>,检查是否存在关于未读消息的数据,>将新数据保存到本地数据库,>广播有关新数据的事件。
我建议您同时使用GCM和套接字连接。GCM确实有助于保持数据的更新。当套接字连接由于网络问题而无法建立时,它会唤醒电话,有时还会传送数据。
https://stackoverflow.com/questions/31610701
复制相似问题