android 花式保活正确姿势求指教

2019-03-04 11:23:36 +08:00
 banixc

需求:需要开发一个 android app, 长时间保持后台,并建立 /保持 websocket 连接,服务端不定时从 ws 向客户端推送消息,客户端收到消息后进行语音播报(soundpool)。

目前实现:

  1. 开启一个进程整一个 service 并保持 foreground notification(通知栏可以持续看到)。
  2. 让用户设置省电优化白名单
  3. 让用户将进程锁定防止被清理(任务切换界面加小锁)

然而存在的问题:

  1. 部分手机如此设置后等一段时间就被 kill
  2. 部分手机锁屏后没有网络,ws 不通,断线或者延迟播报(十几秒,一分钟)。
  3. 部分手机锁屏后代码执行速度会下降,表现为定时 sleep1 分钟后打 log 到后面就变成几分钟打一次了(貌似是 doze 模式), 甚至到最后一条语音播报都会断断续续。

已知的一些应用的解决方案及优化点:

  1. 各大主流国产 OS 内置对一些应用增加白名单如微信等,无需手动设置
  2. 多进程保活后相互拉起(5.0 后失效,系统直接杀死进程组)
  3. 原生进程实现,降低内存占用,可以有效防止被杀
    • 目前新开的进程没有 UI,后台内存占用大概在 30-50M 左右
    • 原生进程能在 20M 以内。
    • 由于 soodpool 预先加载资源到内存,这部分看是否可以优化
  4. 设置 alarm/注册广播

另外还需要实现开机自启动,自动连接,无需每次开机都要打开 app 这样的功能。

如上所述,考虑 3,4 优化点,每个点的收益如何?或者诸位大佬有无更好的解决方案?

PS: 不要说应用流氓,用户的需求就是要常驻进程,但是应用总是被系统各种限制导致播报不及时,国产 OS 和应用的相爱相杀-。-,没有 GMS 或者类似统一推送平台的东西,最后就是是双输的局面。

11522 次点击
所在节点    Android
43 条回复
banixc
2019-03-07 15:33:56 +08:00
@0x8192dd
@ysc3839
@whitev2
@ivanchou
目前我们的用户的目的就是要让这个应用长时间在后台运行,所以做法就是告诉用户,如何设置白名单,并增加小锁(没有从代码层面实现,而是直接告诉用户)。只不过发现有些系统就算这样设置了依旧不行,实在不行就长时间亮屏呗。
whitev2
2019-03-07 15:35:38 +08:00
@banixc #41 顺便告诉用户哪些系统不行,及时甩锅
banixc
2019-03-07 15:35:48 +08:00
@luwies
@unknowngas
我自己的 android 机升级到 9 之后,网易云音乐和 QQ 音乐正放着歌呢 5 分钟就直接被 kill 掉了。不过我还是试下,说不定有用呢。

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

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

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

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

© 2021 V2EX