首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -保持对未见通知、最佳实践的全球跟踪

Android -保持对未见通知、最佳实践的全球跟踪
EN

Stack Overflow用户
提问于 2015-07-24 12:35:15
回答 1查看 739关注 0票数 2

在Android中,我有一个套接字与服务器保持实时通信。该应用程序套接字由一个服务控制,该服务在启动和/或应用程序发出请求时启动。

因为我不能依赖Google PlayStore,所以我完全可以手动控制推送消息的发送和接收。

每当新的推送消息从服务器到达时,套接字服务发送本地广播消息,侦听活动可以在那里执行自己的操作。如果没有找到任何活动,则会向用户发出默认的android通知,表示'ap您有{n}新消息‘.

这有其稳定性问题(例如,在内存不足时,操作系统可以关闭该服务),但它还可以。

现在,请考虑以下内容:

我有多个活动来监听-for和显示未读消息的计数。

  • HomePage
  • ConversationsOverviewPage
  • 会话页面(聊天页面)

每个活动可以在前台,但也可以在内存中,当用户回按和返回1活动。因此,在理论上,可能会出现这样的情况:您希望同时更新不同的/多个活动。这避免了当用户返回到“savedInstance”时,必须“重新加载”来自服务器的未读消息。所以我认为广播模式效果最好。

什么是保持未读消息全局跟踪的最佳实践,同时最小化每个活动实例的服务器行程:

  1. Very :对每个活动实例发出服务器请求,并再次为每个活动编写更新代码。但这会导致用户看到延迟,因为应用程序从服务器接收数据并显示“未读消息”气球需要一秒钟的时间。
  2. Simpel:拥有一个全局类。保留每一次对话的未读信息,但我觉得这会给数据不完整带来问题。尤其是当应用程序不是“活动的”时
  3. 我的旧选票:有另一个服务,跟踪未读消息,启动时(就像套接字)。只有当服务启动/引导时,它才会从服务器请求所有未读消息数据。每个活动都可以“询问”未读消息的数据,而不必再担心它了。但这可能是过头了?
  4. 我的新选票:保留套接字服务,并向该服务添加一个单独的类。保存未读数据..。但这也感觉不对..。因为活动需要向服务部门提出一些超出范围的要求。管理未读消息(关注点分离)不是套接字问题,对吗?

任何有经验的开发人员的感谢都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-24 13:33:25

第三个选择是可以的。不知道overkill到底在哪里。显然,您不应该在每次引导或套接字重新连接上下载所有未读消息。最重要的经验法则是在应用程序真正需要的时候加载数据。关于我是如何开发同一款应用程序的几分钟:

  • 套接字Service处理连接、断开、发送数据(消息)和接收数据。
  • Notification manager,它接收来自SocketService的事件。它保存来自服务器的新数据,并决定应该发送哪个广播通知。
  • 连接套接字时,它从服务器接收状态数据:
    1. 每次聊天的最后更新日期(时间戳)。例如,如果本地数据库包含chat A,那么昨天更新了chat A,但是最近从服务器接收到的数据说,chatA是几秒钟前更新的,您需要广播像chat A has been updated since last connection这样的事件并保存更新日期。如果有任何以某种方式显示聊天A的活动,它会加载(通过http或其他方式)新数据。
    2. 每次聊天都是last messages。这个应用程序只是比较本地保存的last messages和刚收到的。如果有新的,应用程序再次广播事件,如there is unread message/messages from user x。如果有可见的活动,显示更新的聊天,它会更新数据,否则应用程序会显示通知。

因此,接下来是处理未读消息的基本流程:连接到服务器>,检查是否存在关于未读消息的数据,>将新数据保存到本地数据库,>广播有关新数据的事件。

我建议您同时使用GCM和套接字连接。GCM确实有助于保持数据的更新。当套接字连接由于网络问题而无法建立时,它会唤醒电话,有时还会传送数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31610701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档