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

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

对于后台保活的各种手段,在网络上比比皆是,总结下来基本是如下几种:
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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Android记一次后台保活设计心得2018的更多相关文章

  1. 《推送开发全面盘点当前Android后台保活方案的真实运行效果》

        登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页   即时通讯网›专项技术区›推送开发全面盘点当前Android后台保活方案的真实运行效果(截止2 ...   帖子 打赏 分 ...

  2. 全面盘点当前Android后台保活方案的真实运行效果(截止2019年前)

    本文原作者“minminaya”,作者网站:minminaya.cn,为了提升文章品质,即时通讯网对内容作了幅修订和改动,感谢原作者. 1.引言 对于IM应用和消息推送服务的开发者来说,在Androi ...

  3. Android后台保活实践总结:即时通讯应用无法根治的“顽疾”

    前言 Android进程和Service的保活,是困扰Android开发人员的一大顽疾.因涉及到省电和内存管理策略,各厂商基于自家的理解,在自已ROOM发布于都对标准Android发行版作为或多或少的 ...

  4. IM推送保障及网络优化详解(一):如何实现不影响用户体验的后台保活

    对于移动APP来说,IM功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消息推送 ...

  5. Android 应用退到后台

    Android 应用退到后台 2016-4-21 10:29:26 Android L moveTaskToBack(boolean nonRoot) 把包含这个Activity的任务转到后台.并不是 ...

  6. 推荐一款基于Angular实现的企业级中后台前端/设计解决方案脚手架

    ng-alain 是一个企业级中后台前端/设计解决方案脚手架,我们秉承 Ant Design 的设计价值观,目标也非常简单,希望在Angular上面开发企业后台更简单.更快速.随着『设计者』的不断反馈 ...

  7. [FMX]将 Android 程序切换到后台及从后台切换到前台实现

    有时候,我们需要将自己的Android程序切换到后台运行,在必要时,将其切换到前台运行.下面提供了一种实现方式,首先需要引用三个单元:   1 uses Androidapi.JNI.App,Andr ...

  8. Android语音播报、后台播报、语音识别

    Android语音播报.后台播报.语音识别 本文介绍使用讯飞语音实现语音播报.语音识别功能. 讯飞开放平台:http://www.xfyun.cn/index.php/default/index 程序 ...

  9. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-4.在线教育后台数据库设计

    笔记 4.在线教育后台数据库设计     简介:讲解后端数据库设计    ,字段冗余的好处,及常见注意事项 1.数据库设计:          er图:          实体对象:矩形        ...

随机推荐

  1. [ Python ] set集合及函数的使用

    1. set类型 set 和 dict 类似,也是一组 key 的集合,但是不存储 value. 由于 key  不重复,所以,在 set 中, 没有重复的 key 集合是可变类型 (1)集合的创建 ...

  2. Context-Aware Network Embedding for Relation Modeling

    Context-Aware Network Embedding for Relation Modeling 论文:http://www.aclweb.org/anthology/P17-1158 创新 ...

  3. date 时间确定

    获取当前时间: var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; var d ...

  4. java中this的用法如:this.name=name

    package com.chensi; /** * 这个是为了搞懂那个 this.name = name的. * @author ZHL * */ public class ThisTestZhl { ...

  5. virtualenv--创建虚拟环境

    一.virtualenv 优点 1.使用不同应用开发环境独立 2.环境升级不影响其他应用,也不会影响全局的python 环境二.安装 pip install virtualenv 三.使用virtua ...

  6. Set Matrix Zeroes——常数空间内完成

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Did yo ...

  7. 使用python读取文本中结构化数据

    需求 read some .txt file in dir and find min and max num in file. solution: echo *.txt > file.name ...

  8. npm --save-dev --save 的区别【转载】

    源地址:http://blog.csdn.net/juzipchy/article/details/65653683 npm install 在安装 npm 包时,有两种命令参数可以把它们的信息写入 ...

  9. 微软企业库5.0 学习之路——第八步、使用Configuration Setting模块等多种方式分类管理企业库配置信息

    在介绍完企业库几个常用模块后,我今天要对企业库的配置文件进行处理,缘由是我打开web.config想进行一些配置的时候发现web.config已经变的异常的臃肿(大量的企业库配置信息充斥其中),所以决 ...

  10. vue-music 关于Player (播放器组件)--播放模式

    播放器播放模式有三种,顺序播放,单曲循环,随机播放,定义在vuex 中的字段为 mode.点击切换播放模式的图标.切换模式判断是否为随机播放,如果是随机播放模式,则取得sequenceList 列表数 ...