Android 黑屏后怎么保持网络通信?

2018 年 2 月 18 日
 boywhp

测试发现黑屏后, 创建的后台服务通信线程基本上被冻结了, 直接不执行了!!! 很好奇微信和 QQ 是怎么做到黑屏后正常通信的? [华为荣耀 9 Android7 WIFI 环境下测试的]

我的程序使用了一个主通信循环, 自定义心跳机制(30s 无心跳服务端认为断线), 黑屏后直接没法用了, 网上找了一些资料:

  1. AlarmManager 但是好像也是各种坑
  2. PowerManager.PARTIAL_WAKE_LOCK, 但是我看微信好像没有申请这个权限啊?

Android 新手, 求大虾指点

19922 次点击
所在节点    Android
23 条回复
yexm0
2018 年 2 月 18 日
因为有白名单嘛,你的程序要保留后台得进相关设置里加
YaTTL
2018 年 2 月 18 日
微信是靠的随机唤醒锁。
现在主要是靠第三方 Push 方案,各大定制系统后台管理都很严格的。
fangchang
2018 年 2 月 18 日
首先当系统进入休息状态是时,你需要唤醒系统。
其次,如果你是 30s 一次的话,你可以用一个 alarm manager 做一个 30s 循环的 alarm,在 receiver 里创建一个 service, 接着由 service 唤醒系统。 当你数据通讯完后,关闭 service。 就是这样一个 30 秒循环。
Cavolo
2018 年 2 月 18 日
看到后台权限这么紧就放心了
boywhp
2018 年 2 月 18 日
@yexm0 还真是华为后台白名单导致的, 我把我的程序加到白名单里, 终于可以正常工作了
300
2018 年 2 月 18 日
国产系统都是默认把部分应用加白名单的
sysdump deviceidle whitelist
18583826786
2018 年 2 月 18 日
后台锁住
yufz
2018 年 2 月 18 日
楼主,Doze 模式和 App Standby 了解一下
lfzyx
2018 年 2 月 18 日
evagreenworking
2018 年 2 月 18 日
JobScheduler/Firebase JobDispatcher 但这不是设计用来实时通信的 原生 8.0 以后用户不给你后台权限要后台即时通信只有走 FCM 或者你作为前台服务一直趴在用户通知栏上
nekoyaki
2018 年 2 月 19 日
楼主都说了华为,你们都答的什么啊。
华为就这样,华而不实为所欲为。即使你在原生安卓能做到的,在华为上也高概率不行。
新手建议换个手机先把程序跑通,再上华为调,这样你才能知道哪些代码是需要专门针对华为做的。
gamexg
2018 年 2 月 19 日
原来可行的方案,现在不知道是否可行:
长连接由客户端建立,但是心跳包由服务器定时主动发出,一般手机收到数据后会唤醒对应的程序,这样就避开了 AlarmManager 频率问题,AlarmManager 只做低频率检查长连接是否正常。
gamexg
2018 年 2 月 19 日
@gamexg 另外别忘了添加到白名单。
zj299792458
2018 年 2 月 19 日
@gamexg 只再 iOS 上听过长链接能唤醒应用的说法,而且需要在应用退出的时候把 tcp socket 交给系统托管,iOS 10 就用不了了,安卓更是不存在的
boywhp
2018 年 2 月 19 日
@gamexg @zj299792458 我昨天测试也发现了这个现象, TCP 服务端 KEEPALIVE 报文可以立即唤醒 Android 黑屏下的客户端!!! 不过我没进一步测试能持续多长时间.
gamexg
2018 年 2 月 19 日
@boywhp #15
@zj299792458 #14

3、4 年前做长连接推送时是可行的,不过当时是做的行业软件,特定型号手机,没广泛测试各个手机型号。
基本是 1 秒推送到位,长连接可以维持全天。
why1
2018 年 2 月 19 日
@boywhp 怎么加,华为的
realpg
2018 年 2 月 20 日
杀进程系省电 ROM 华为就是代表 一定要加不杀白名单
boywhp
2018 年 2 月 20 日
@why1 设置->电池->锁屏清理应用
why1
2018 年 2 月 20 日
@boywhp 我这机子要插充电器或是一直亮屏应用才不会被冻结 emui 5.0.1 Android 7.0,原来 emui 4,Android6 只要放着音乐就没事

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

https://v2ex.ih06.com/t/431161

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

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

© 2021 V2EX