测试发现黑屏后, 创建的后台服务通信线程基本上被冻结了, 直接不执行了!!! 很好奇微信和 QQ 是怎么做到黑屏后正常通信的? [华为荣耀 9 Android7 WIFI 环境下测试的]
我的程序使用了一个主通信循环, 自定义心跳机制(30s 无心跳服务端认为断线), 黑屏后直接没法用了, 网上找了一些资料:
Android 新手, 求大虾指点
![]() | 1 yexm0 2018-02-18 20:09:34 +08:00 via iPhone 因为有白名单嘛,你的程序要保留后台得进相关设置里加 |
2 YaTTL 2018-02-18 20:22:16 +08:00 via Android 微信是靠的随机唤醒锁。 现在主要是靠第三方 Push 方案,各大定制系统后台管理都很严格的。 |
3 fangchang 2018-02-18 20:24:14 +08:00 首先当系统进入休息状态是时,你需要唤醒系统。 其次,如果你是 30s 一次的话,你可以用一个 alarm manager 做一个 30s 循环的 alarm,在 receiver 里创建一个 service, 接着由 service 唤醒系统。 当你数据通讯完后,关闭 service。 就是这样一个 30 秒循环。 |
4 Cavolo 2018-02-18 20:51:49 +08:00 via iPhone ![]() 看到后台权限这么紧就放心了 |
![]() | 6 300 2018-02-18 21:22:20 +08:00 国产系统都是默认把部分应用加白名单的 sysdump deviceidle whitelist |
7/span> 18583826786 2018-02-18 21:22:23 +08:00 via Android 后台锁住 |
![]() | 8 yufz 2018-02-18 21:35:08 +08:00 via Android 楼主,Doze 模式和 App Standby 了解一下 |
![]() | 9 lfzyx 2018-02-18 21:39:53 +08:00 |
10 evagreenworking 2018-02-18 22:51:21 +08:00 JobScheduler/Firebase JobDispatcher 但这不是设计用来实时通信的 原生 8.0 以后用户不给你后台权限要后台即时通信只有走 FCM 或者你作为前台服务一直趴在用户通知栏上 |
![]() | 11 nekoyaki 2018-02-19 08:09:41 +08:00 楼主都说了华为,你们都答的什么啊。 华为就这样,华而不实为所欲为。即使你在原生安卓能做到的,在华为上也高概率不行。 新手建议换个手机先把程序跑通,再上华为调,这样你才能知道哪些代码是需要专门针对华为做的。 |
![]() | 12 gamexg 2018-02-19 10:05:48 +08:00 via Android 原来可行的方案,现在不知道是否可行: 长连接由客户端建立,但是心跳包由服务器定时主动发出,一般手机收到数据后会唤醒对应的程序,这样就避开了 AlarmManager 频率问题,AlarmManager 只做低频率检查长连接是否正常。 |
14 zj299792458 2018-02-19 10:28:45 +08:00 via iPhone @gamexg 只再 iOS 上听过长链接能唤醒应用的说法,而且需要在应用退出的时候把 tcp socket 交给系统托管,iOS 10 就用不了了,安卓更是不存在的 |
![]() | 15 boywhp OP @gamexg @zj299792458 我昨天测试也发现了这个现象, TCP 服务端 KEEPALIVE 报文可以立即唤醒 Android 黑屏下的客户端!!! 不过我没进一步测试能持续多长时间. |
![]() | 16 gamexg 2018-02-19 12:21:28 +08:00 ![]() @boywhp #15 @zj299792458 #14 3、4 年前做长连接推送时是可行的,不过当时是做的行业软件,特定型号手机,没广泛测试各个手机型号。 基本是 1 秒推送到位,长连接可以维持全天。 |
![]() | 18 realpg PRO 杀进程系省电 ROM 华为就是代表 一定要加不杀白名单 |
20 why1 2018-02-20 12:18:49 +08:00 via Android @boywhp 我这机子要插充电器或是一直亮屏应用才不会被冻结 emui 5.0.1 Android 7.0,原来 emui 4,Android6 只要放着音乐就没事 |
22 fengleidongxi 2018-02-21 10:13:59 +08:00 @boywhp 楼主通信的传输的是什么? |
![]() | 23 boywhp OP @fengleidongxi 加密二进制数据报文, 不是 HTTP 哈 |