zoukankan      html  css  js  c++  java
  • Android记一次后台保活设计心得2018

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

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

    对于后台保活的各种手段,在网络上比比皆是,总结下来基本是如下几种:
    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
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    【原】Shell脚本-判断文件有无进而复制
    【原】个人对win7开机黑屏只有鼠标排障总结
    【原】window上安装elasticserach
    【原】CentOS7上安装Xwiki8.2.1
    Java集合中Map接口的使用方法
    Java集合中Set的常见问题及用法
    Java计时器Timer和TimerTask用法
    Java集合中List的用法
    Java RuntimeException异常处理汇总
    用Java计算某个日期100天后的日期
  • 原文地址:https://www.cnblogs.com/ldq2016/p/8416680.html
Copyright © 2011-2022 走看看