如何像微信那样具有长效的后台消息通知

2022-06-26 14:58:48 +08:00
 fhj
        val job = Job()
        val mCoroutineScope = CoroutineScope(job)
        val notification = NotificationCompat.Builder(service, "1")
            .setContentTitle("test")
            .setSmallIcon(R.drawable.ic_action_name)
            .setAutoCancel(true)
        startForeground(1,notification.setContentText("")
            .build())
        stopForeground(true)

最后创建了一个协程,在协程中从服务器获取最新消息并通知 具体过程如下:

mCoroutineScope.launch{
while(true)
{
val content = 从网络中获取消息
val notfi = notification.setContentText(content)
                        .setContentIntent(pending)
                        .build()
notificationManager.notify(id, notfi)
}
}

我的问题是: 启动服务后,把 app 拉到了后台,当服务运行一会后,消息就不会再弹出,就需要再次进入 app 界面,消息又开始弹出,如此往复。并不能像微信那样拉到后台后,后台服务不会暂停,消息会及时的弹出。

10996 次点击
所在节点    Android
14 条回复
Muniesa
2022-06-26 15:03:54 +08:00
微信是手机厂商加了白名单
Buges
2022-06-26 15:06:44 +08:00
添加到电池优化白名单
fhj
2022-06-26 15:07:59 +08:00
@Muniesa 我擦,大佬,我这个代码写的有问题吗
fhj
2022-06-26 15:08:16 +08:00
@Buges 我试试
fhj
2022-06-26 16:10:08 +08:00
@Buges 解决了,谢谢
cheng6563
2022-06-26 16:10:35 +08:00
依系统不同,引导用户操作增加后台白名单,电池优化白名单,自启白名单等。
不然代码里基本玩啥都没用
微信一般系统默认加白。
fhj
2022-06-26 16:19:47 +08:00
@cheng6563 谢谢解答
bruce0
2022-06-26 16:20:31 +08:00
以前的 Android 有个规则, 好多年不弄 Android 了 不知道现在还是这样吗, 前台服务的优先级 > 后台服务, 也就是在通知栏里显示一个通知的服务, 不会被优先杀死, 以前这样弄过, 确实一般不会被杀了.

其实还是看系统的策略, 有的系统不会杀,有的系统还是杀, 就像楼上说的那样, 加入优化,电池,后台, 自启等等白名单, 这个在业务层没法实现靠谱保活
fhj
2022-06-26 16:29:47 +08:00
现在好像也是这样,谢谢解答
fhj
2022-06-26 16:29:55 +08:00
@bruce0 现在好像也是这样,谢谢解答
ysc3839
2022-06-26 19:59:01 +08:00
参考 Telegram Android 的代码,有个 Keep-Alive Service 的功能,在 MIUI 上允许自启动后,后台服务被杀死后可以立即重启,如果再把“省电策略”设置成“无限制”的话,系统内存充足的情况下后台服务可以长时间运行不被杀死。但是有个例外,如果用户在最近任务中划掉则一定会被杀死,即使有前台服务也会被杀,但仍然可以通过前面所说的“自启动”重新启动。
em70
2022-06-26 20:05:45 +08:00
除了微信,所有的即时通讯 APP 在后台都会被杀而收不到消息
fox0001
2022-06-27 17:21:24 +08:00
记得以前看过文章,介绍微信怎么保活。这是个感觉简单常用,但实现起来很麻烦的事情。

简单总结:
1 )后台运行
2 )消息推送拉起
3 )全家桶的其它 App 拉起
4 )系统默认设置白名单,就是安装后默认设置不杀进程
IGJacklove
2022-06-27 19:11:38 +08:00
推送不就行了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862283

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX