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

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采用这种方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux修改栈指针x86,为什么x86-64 Linux系统调用会修改RCX,这个值意味着什么?

我正在尝试使用sys_brk syscall在linux中分配一些内存.这是我尝试过的:BYTES_TO_ALLOCATE equ 0x08section .textglobal _start_start:mov rax, 12mov rdi, BYTES_TO_ALLOCATEsyscallmov rax, 60syscall根据linux调用约定,我希望返回值在rax寄存器中(指向已分配内存…

wordpress phpmyadmin_西部数码使用指南:虚拟主机WordPress部署SSL注意事项

版权归西部数码所有,原文链接:https://www.west.cn/faq/list.asp?unid2068注意事项:1.如果您的主题/插件使用绝对地址调用了http请求可能会导致网站打开会乱码,或不能有绿锁标识,需要联系程序提供商将所有http请求修改…

android html转pdf工具,android – 使用iText库将html转换为pdf时未应用hr的内联CSS

我是.NET开发人员,因此代码在C#中.但是你应该能够轻松翻译以下内容.iText是一个PDF优先的库,[X] HTML解析非常复杂,因此在这方面并不完整.每当解析[X] HTML并且事情不按预期的方式进行特定标记时,您应遵循的基本步骤是:>验证XML Worker支持标记:Tags …

python 小说爬虫_从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载

从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载Ehco 5 个月前 本来只是准备做一个爬起点小说名字的爬虫,后来想了一下,为啥不顺便把小说的内容也爬下来呢?于是我就写了这个爬虫,他爬下了各类小说排行榜上…

java 某个字符在字符串中出现的所有位置_Java面试常考核心概念

这篇文章专注于Java基础知识,不涉及List、Map、多线程、锁相关的内容,需要的可以查看我的其他博客hofes blog​hhf443.github.ioJDK&JRE&JVMJDK(Java Development Kit)是针对 Java 开发员的产品,是整个 Java 的…

lan交换和无线教师手册_简单几步,无线路由器变交换机

当原来的路由器lan口不够用,可以加一个交换机扩展lan口数量,如果需要增加的lan口数量不超过3个可以考虑找台不用的无线路由器当交换机用。另外,随着交换机更新家中都有旧无线路由器闲置,完全可以再次利用。下面看一下,…

Linux fast open,Linux内核3.7 TCP Fast Open验证实例

Linux内核在3.6和3.7合入了TCP Fast Open特性,在3.7.3版本上验证了一下,I did it!以下是C语言实例():server端代码:#include /* See NOTES */#include#include#includeint main(){int portno 5060;socklen_t clilen;char buffer[…

vue 怎么全局到入常量_Vue 中如何定义全局的变量和常量(转)

17.6k 次阅读 读完需要 10 分钟7Vue 中如何定义全局的变量和常量我想要定义一个变量, 在项目的任何地方都可以访问到, 不需要每一次使用的时候, 都引入.尝试1:创建 global.js 并且在其中定义let a 10;在入口文件中引入 global.jsimport ./global.js在项目中使用:a// 报错发…

revit找不到附加模块程序集_TensorFlow基础知识——常用模块(一)

1本节简述对于开展深度学习开发的目标而言,我们需要掌握的除了必要的深度学习理论基础、必要的开发依赖库基础知识、基本的开发套路之外,我们还需要掌握它常见的外围小帮手都有哪些。这些小帮手就是深度学习依赖库中的其他并不是核心的模块,但…

android搭建opencv开发环境,Android Studio搭建opencv开发环境

文章不配图片,阅读需要有Android开发基础并熟悉Android Studio。一、搭建基于Java开发环境以下内容介绍如何搭建基于Java jni的opencv开发环境。1、准备工作从opencv官网下载Android平台开发sdk并解压,假设解压后文件夹名为opencv-4.3.0-android-sdk。(此…

99 网络编程_网络工程师技能图谱,看看你会多少技能

技术推动了时代变革,互联网则加速了这场变革。在蓬勃发展的互联网浪潮下,网络作为基础设施的关键纽带保障着网路流量的顺利流通,维持着赛博世界的繁荣。而在这繁荣之下,生存着这样一个群体——网络工程狮,为网络纽带保…

python 3.8.0安卓_Python for Mac v3.8.0 官方最新版

Python for Mac是一款全新推出的编程工具,所有 python.org macOS 安装程序都附带了 OpenSSL 的内置副本。此外,还有一个针对 macOS 10.9 的新增安装程序变体,其中包含 Tcl / Tk 8.6的内置版本,有需要的朋友快来下载试试吧!Python …

线程join_Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)

点击上方“Coder编程”,选择“置顶公众号”技术文章第一时间送达!并发编程.png每天进步一点,不做curd工程师与Api调用工程师 欢迎访问个人博客网站:https://www.coder-programming.cn/ 作者:liuxiaopeng | http://www…

4位先行进位电路 logisim_你真的了解74系列集成电路吗?让我帮你总结一下

74系列集成电路大致可分为6大类:74(标准型)74LS(低功耗肖特基)74S(肖特基)74ALS(先进低功耗肖特基)74AS(先进肖特基)74F(高速)HC为COMS工作电平;HCT为TTL工作电平,可与74LS系列互换使用HCU适用于无缓冲级的CMOS电路。这9种74系列产品&#xf…

android ios av tv,iOS使用AVPlayer制作战旗TvDEMO OC版

在视频教学中看到一个别人写的战旗TvDEMO写得很好,于是自己动手试着制作一个。效果如下图所示主界面竖屏播放横屏播放点击出现工具栏视频播放使用的是AVPlayer,具体的使用方式如下//---PlayView---_playView [[UIView alloc]init];_playView.frame CGRectMake(0, …

matlab 子图title的位置_matlab 画图基本介绍

1.在命令窗口输入命令时&#xff0c;可以不必每输入一条命令就按enter键执行&#xff0c;可以在输入几行后一同运行。方法是&#xff1a;换行时&#xff0c;只要在按住<shift>键的同时按<enter>键即可&#xff0c;否则matlab就会执行上面输入的所有语句。2.如何将数…

python程序打包成安卓app教程_Python打包方法基本应用方式介绍

Python编程语言是一款功能强大的免费开源的通用型计算机程序应用语言&#xff0c;对于经验丰富的开发人员来说&#xff0c;掌握这样一款语言在其程序开发中是一个比较重要的选择。我们今天就先来了解一下python打包方法的相关应用。 一、简介 py2exe是一个将Python脚本转换成wi…

android添加删除项目,编写android计算器添加删除按钮,出现很抱歉,XX项目已停止运行。...

这是删除按钮监听代码&#xff1a;//del 按钮的监听btnDel (Button) findViewById(R.id.delete);btnDel.setOnClickListener(new OnClickListener() {Overridepublic void onClick(View view) {btnDel.setOnClickListener(this);//短按//btnDel.setOnLongClickListener(this);…

二元一次方程有唯一解的条件_人教版初中数学七年级下册用适当方法解二元一次方程组公开课优质课课件教案视频...

解二元一次方程组---加减法一、教学目的&#xff1a;1&#xff0e;使学生掌握用加减法解二元一次方程组的步骤。2&#xff0e;熟练运用加减法解二元一次方程组。3&#xff0e;培养学生分析问题、解决问题的能力。二、教学重点、难点和关键&#xff08;一&#xff09;重点&#…

为什么从网页上打印怎们好像被缩放_全网最详细关于3D打印的zbrush技术

这个小教程旨在为刚开始对3D打印感兴趣的新人朋友提供一些快速上手小技巧&#xff0c;以便在zbrush中制作适合桌面FDM 3D打印的创作&#xff0c;本次小教程需要读者已经有一些zbrush基础知识。1设置系统单位导入1英尺的box&#xff0c;1英尺X1英尺X1英尺。一旦导入到场景中&…