Android 后台保活手段总结 (上篇)

由于众所周知的限制,在国内无法使用GCM推送服务,想要自己搭建推送服务的话,有两个绕不开的技术点,一个是TCP长连的保活,另一个就是后台进程的保活。虽然看起来是老生常谈的问题,但竟然是收到私信里问到最多的内容。于是在这里做一个目前接触的保活手段,做一个总体的总结

常规保活方案

利用Notification提升权限

Android 中 Service 的优先级为4,通过 setForeground 接口可以将后台 Service 设置为前台 Service,使进程的优先级由4提升为2,从而使进程的优先级仅仅低于用户当前正在交互的进程,与可见进程优先级一致,使进程被杀死的概率大大降低。

需要注意的是,在最新的Android 8.0系统上,setForeground变成了强制性的行为,任何后台Service都必须调用这个方法,否则五秒钟后系统强制ANR Crash。这里涉及到另外的一个坑是——哪怕你的Service只是做点业务逻辑后销毁,也需要先调用这个接口,因为不同的国产ROM重新定义了“五秒钟”(手动滑稽),你以为只需要占用1秒的业务逻辑,上线都可能分分钟崩溃给你看。

然而调用这个API后,系统通知栏上会显示“XXX应用在后台运行”,无法去掉。8.1系统上已经去掉了这个很不友好的通知栏常驻显示。

利用系统广播拉活

在发生特定系统事件时,系统会发出响应的广播,通过在 AndroidManifest 中“静态”注册对应的广播监听器,即可在发生响应事件时主动尝试拉活Service。

可以用于拉活的广播事件包括:

备注

广播事件

开机

RECEIVE_BOOT_COMPLETED

网络变化

ACCESS_NETWORK_STATE CHANGE_NETWORK_STATE ACCESS_WIFI_STATE CHANGE_WIFI_STATE ACCESS_FINE_LOCATION ACCESS_LOCATION_EXTRA_COMMANDS

文件挂载

MOUNT_UNMOUNT_FILESYSTEMS

屏幕状态变化

SCREEN_ON SCREENOFF

锁屏解锁

RECEIVER_USER_PRESENT

应用卸载安装

PACKAGE_REMOVED PACKAGE_ADDED

在Android 8.0系统上,这个方法已经不生效了,因为8.0系统已经去掉了这种静态广播注册的形式,系统广播必须使用动态注册,即应用启动后registerReceiver,在Manifest里配置广播已经无法生效。

另外,在某些深度定制的系统上效果一般,比如华为系统上,应用进程一旦终止,无法使用系统广播的形式重新唤起。

利用系统Service START_STICKY机制拉活

将 Service 设置为 START_STICKY,利用系统机制在 Service 挂掉后自动拉活。最基本的方式,不解释了。

利用Native进程拉活

Native双进程守护的方式曾经风靡一时,被当做“黑科技”,然而遗憾的是实际上效果一般,仅仅在5.0以下系统兼容较好,深度定制的系统中:魅族、华为、小米等,都效果略差。从recent中杀进程后无法重新拉起,后台一段时间以后也会被杀掉。仅适合5.0以下版本仍然较高的APP采用这种方法。

android 保活方案_Android 后台保活手段总结 (上篇)相关推荐

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

    全面盘点当前Android后台保活方案的真实运行效果(截止2019年前) 本文原作者"minminaya",作者网站:minminaya.cn,为了提升文章品质,即时通讯网对内容作 ...

  2. 盘点im即时通讯开发中Android后台保活方案

    对于IM应用和消息推送服务的开发者来说,在Android机型上的后台保活是个相当头疼的问题. 老板一句:"为什么微信.QQ能收到消息,而你写的APP却不行?",直接让人崩溃,话说老 ...

  3. Android 后台保活,这里有你需要的所有姿势。2019,最新版本。

    DaemonLibrary 项目地址:ShihooWang/DaemonLibrary 简介:Android 后台保活,这里有你需要的所有姿势.2019,最新版本. 更多:作者   提 Bug 标签: ...

  4. Android 后台保活,这里有你需要的所有姿势。2019,flutterlistview滚动卡顿

    老规矩,先上项目地址: https://github.com/wangshihu123/DaemonLibrary 结合网上各路大神及自己的项目保活实战(在此不方便透露项目),给出了最新的保活姿势.( ...

  5. Android 后台保活,这里有你需要的所有姿势。2019,最新版本

    老规矩,先上项目地址: https://github.com/wangshihu123/DaemonLibrary 结合网上各路大神及自己的项目保活实战(在此不方便透露项目),给出了最新的保活姿势.( ...

  6. Android 后台保活设计2019,最新版本

    DaemonLibrary 使用方式 Step 1. Add the JitPack repository to your build file allprojects {repositories { ...

  7. Android进程保活方案

    自己曾经也在这个问题上伤过脑经,前几日刚好有一个北京的哥们在QQ说在做IM类的项目,问我进程保活如何处理比较恰当,决定去总结一下,网上搜索一下进程常驻的方案好多好多,但是很多的方案都是不靠谱的或者不是 ...

  8. 微信团队原创分享:Android版微信后台保活实战分享(进程保活篇)

    http://www.52im.net/thread-210-1-1.html 哪些部分需要"保活"? 按照我们的理解包含两部分: 网络连接保活: 如何保证消息接收实时性.详见本文 ...

  9. 什么是Android进程(app)保活、进程保活的方案

    想了解什么是Android 进程.Android 进程的生命周期.Android 进程回收策略 可参照地址什么是Android 进程.Android 进程的生命周期.Android 进程回收策略_lm ...

最新文章

  1. Windows Phone开发(39):漫谈关键帧动画上篇 转:http://blog.csdn.net/tcjiaan/article/details/7550506...
  2. Redis Key资源占用情况的可视化分析
  3. PHP 判断数据类型
  4. comparator 字符串比较大小_Java中Comparable和Comparator实现对象比较
  5. 【Matlab/C/Python/VB/...】代码复制到word时如何变成彩色的
  6. centos下mysql 命令,CentOS下mysql 常用命令
  7. 南阳oj-----找球号(一)(set)
  8. 计算机d盘无法格式化,电脑的D盘无法进行格式化怎么办?最强悍的三种解决方式看这里!...
  9. 【重识云原生】第六章容器6.1.3节——Docker常用命令
  10. matlab产生窄带高斯随机过程,窄带随机过程的产生及其性能测试
  11. 笔记本计算机运行程序,详细教您设置笔记本自动关机
  12. 十、k8s健康检查之 livenessProbe/readinessProbe
  13. 【知识兔】Excel教程:批量合并相同内容单元格神技
  14. Linux-网络命令
  15. stm32实现毫秒ms微秒us级延时
  16. NEO4J的安装配置及使用总结
  17. 入门UI设计要学习什么内容?
  18. python画图柱状图修改相邻两个柱之间的间隔
  19. 谷歌PR更新到2,双喜临门?
  20. 聚人才创未来 | 拓保软件荣获“2020年度最具发展潜力雇主”

热门文章

  1. Guns 删除功能_入门试炼07
  2. 企业实战(Jenkins+GitLab+SonarQube)_11_Jenkins权限的划分
  3. Mybatis 常用语句
  4. 用 Excel+VBA 与 SQL Server 数据库交互
  5. 可能这些是你想要的H5软键盘兼容方案
  6. winform php 交互,WinForm开发,窗体显示和窗体传值
  7. sharepoint文件夹本地同步_mac文件同步软件-Resilio Sync Home
  8. 前端电子表数字字体_爬虫:如何优雅应对字体反爬
  9. BugkuCTF-Reverse题NoString
  10. oracle ogg00423,【案例】Oracle报错PLS-00378 PLS-00439产生原因和MOS官方解决办法