【发布时间】:2017-12-04 09:32:44
【问题描述】:
我有一个 Android 应用程序,即时消息是其中一项关键功能。为了实现 IM 功能,我们使用基于websocket 的推送服务器。
对于我的应用,我有一个 PushService,在这个服务中,我建立了一个 websocket 连接,它连接到推送服务器并接收推送消息。
当应用程序在前台时代码运行良好(即:当用户使用应用程序时运行良好),但当应用程序不在前台时,它会在一段时间后(大约 1 分钟)停止接收推送消息。用户关闭屏幕时同样的问题。
我用AlarmManager设置了repeat任务,检查websocket的连接状态,如果不是连接状态,则重新尝试连接,恢复正常接收推送消息。
这在 Android M 下运行良好,例如在 Android 5 手机上,它很少错过推送消息。但在 Android M / Android N 上,它的效果不如 Android 5.x。我可以确认服务本身正在运行,请从“正在运行的服务”中检查。
我注意到从Android M开始,Android引入了Doze和Standby模式,不确定它们是否相关,如果是,我怎样才能让应用程序再次继续工作?在我的手机上,微信和 Skype Android App 运行良好,它背后的机制是什么?我知道 FCM 是最好的解决方案,但我不能为中国的客户使用它,所以我需要一个解决方法。
编辑:我曾提议使用前台服务,但 PM 不喜欢通知托盘总是显示在状态栏中,他希望保持干净。
任何建议将不胜感激!
【问题讨论】:
-
也许你需要注册一个前台服务。上一个问题可能会对您有所帮助:stackoverflow.com/q/46780547/2012017
-
@JustinHeath,感谢您的评论。我曾建议 PM 使用前台服务但被拒绝,因为他不喜欢通知托盘来保持状态栏清洁。 (我将编辑我的问题以避免使用前景)
-
@LiuWenbin_NO.你找到解决方案了吗?
-
@SilviaH,抱歉,我没有找到在 Android N / O 上运行的解决方案。切换到 FCM 但问题仍然存在。
标签: android service websocket push