首先我并不推荐也不喜欢手机应用通过各种手段后台保活,但是当产品经理确定一定以及肯定地提出了这个需求,活着应用有着必须常驻后台的理由,也就只有硬着头皮去与各个手机的后台管理机制做斗争了。

背景:因为开发的应用属于医疗监测类型,而且监测着对于病人十分重要的一项身体指标,所以需求为应用不仅要常驻后台,更要在后台不停地接收检测器发出的数据,实时为患者记录,及时提出告警,而在投放市场后华为用户出现了一致的问题,后台连接不稳定以及无时无刻地后台被杀。

对于后台保活的各种手段,在网络上比比皆是,总结下来基本是如下几种:
1.开启服务,设置服务杀死重生;
2.开启服务,发送通知,设置为前台服务;
3.双进程保活;
4.检测各种系统广播启动应用;
5.息屏打开1像素点Activity;
6.开启服务,播放无声音乐(七伤拳);
7.优化应用内存(当我没说这句大实话);

这七种方法,最优秀的无非是最后一种,但我总是习惯性的不去考虑他,真是坏习惯。
这里列举的方式在网上都可以查询到,但是因为android版本不同rom不同,不一定都能派上用场,这里就不多说了。

在这次保活战中一共涉及了个品牌的手机:
随意蹂躏系
Nexus5、Nexus6、Sony Z5、LG G4、LG G5、Samsung S6 S7(未升级到最新版本)
尚有尊严系
小米5X、魅族Note6、OPPO R11、VIVO X9柔光双摄照亮你的美(...洗脑真可怕)、Samsung J3 J5(升级到最新版本)、华为P9 P10、荣耀8(当你在后台啥都不做的时候,或者稍微动了一下)
宁死不屈系
华为P9 P10、荣耀8(当你在后台动个不停的时候)

对于随意蹂躏系,请好好照顾,他们提供了原生或者接近原生的后台管理机制,是因为相信每个应用不会作妖,所以,不到万不得已,不要欺负他们;

对于尚有尊严系,多为定制程度较高的第三方ROM,杀死后台也多处于其定制的功耗管理机制,尝试过很多灵性方法,很难做到一招鲜吃遍天,但这些ROM都留下了功耗管理白名单,他们需要保证自己系统地流畅运行,同时他们也考虑到了有些应用有他们不得不说的苦(交)衷(易),所以尊重ROM厂商的限制,不要作妖,有需求,打开白名单,你好,我也好。

最后是宁死不屈系,这也是遇到的最大的难题,前面有提到我的应用不仅需要常驻后台,更需要在后台接收设备发出的蓝牙数据,也就是说我需要在后台动次打次。

以下的故事发生于我按照华为的显示开启了功耗管理白名单、后台清理白名单、忽略电量优化白名单。

于是号称是18个月不卡顿的华为出现了,也成功制裁了我:

  • 首先是蓝牙广播模式,当你息屏五分钟之后,由后台发起的蓝牙扫描就被休眠了,GG;
  • 然后是连接模式,息屏后运行一小时,GG;

服务重生+前台服务+双进程守护,神装在手,依旧被华为按在地上打。
直到最后,武林中流传着这样一套拳谱,伤敌一千自损八百,名曰七伤拳:无声音乐保活大法
也就是在服务中循环播放一段无声的音乐,cosplay正在播放的音乐播放器。
没错,酱紫确实在华为18个月不卡顿的后台管理下活了下来,但代价是飙升的功耗,以及多任务菜单提示的音乐播放icon
但对于我这种特殊的应用来说,能够常驻后台,持续监测患者的状态,给出最及时的健康提示,才是最重要的;

末了,还是想聊一下各个rom做出的后台限制,对于开发者来说,最欢迎的当然是原生这种随意蹂躏系,但是汝之蜜糖,彼之砒霜,这种策略如果在流氓肆虐的国内市场,估计早被啃得渣都不剩了,所以我个人觉得在国内市场环境下,尚有尊严系的做法挺好的,有需求就手动开启,各取所需,一切由用户决定;至于宁死不屈的华为,为了达到18个月不卡顿的效果,做出这种惨绝人寰的后台三光策略,有点不近人情,有点过分。

希望国内的应用市场流氓越来越少,Android手机越来越好用(就当我放了个屁)


作者:我爱小白小白爱大开
链接:https://www.jianshu.com/p/2fe6250a7503
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. tomcat并发
  2. Linux下配置OpenCV1.0环境
  3. Rails--default_scope
  4. python, itertools模块
  5. [转]深入理解Flash Player重绘
  6. 项目优化经验分享(八)TeamLeader经验总结
  7. 第十七章 委托 第十八章 Attribute 第十九章 可空值类型
  8. 基于Linux根据僵尸网络病毒平台《比尔盖茨》
  9. 使用php-fpm状态页观察当前的php-fpm状态
  10. 深入浅出Ajax(一)
  11. tomcat 修改为自己项目界面
  12. 推荐!手把手教你使用Git(转载)
  13. ●BZOJ 3994 [SDOI2015]约数个数和
  14. 微信小程序 --- 无法跳转到tab页面问题
  15. 二十一、Hadoop学记笔记————kafka的初识
  16. SpringMVC的HandlerMapping(处理器映射器)
  17. .NET Core开发日志——OData
  18. tensorflow一些常用函数的使用注意
  19. 使用Spring的AbstractRoutingDataSource类来进行拓展多数据源
  20. Android开发训练之第五章第四节——Syncing to the Cloud

热门文章

  1. mybatis模糊查询sql
  2. mysql 安装和配置
  3. C# 笔记——覆盖和重写
  4. leetcode 之Plus One(9)
  5. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记2——透明贴图,动画技术
  6. hdu 1081(最大子矩阵)
  7. ps -ef和ps aux的区别
  8. 【转载】JAVA多线程和并发基础面试问答
  9. 调用git命令行执行更新的思路
  10. AC日记——妖梦拼木棒 洛谷 P3799