Android 进程常驻(2)----细数利用android系统机制的保活手段

Android 进程常驻(0)----MarsDaemon使用说明 Android常驻进程,进程保活,通过native实现进程守护,低耗电,在root360,rootCM,系统forceclose 下均可存活,测试系统从2.3到5.1,机型为三星、华为、小米、亲儿子。本文记录了笔者从开始调研,到一步一步的试验的基本全部思路。ps:只为服务用户,只为技术交流,流氓绕行。 阅读详情

这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean master获取root权限下都无法杀死进程

支持系统2.3到6.0

支持大部分设备,包括三星,华为,oppo,nexus,魅族等等

可以简单对开机广播进行保护


github地址:

https://github.com/Marswin/MarsDaemon

原理分析:

Android 进程常驻(0)----MarsDaemon使用说明

Android 进程常驻(1)----开篇

Android 进程常驻(2)----细数利用android系统机制的保活手段

Android 进程常驻(3)----native保活5.0以下方案推演过程以及代码详述

Android 进程常驻(4)----native保活5.0以上方案推演过程以及代码详述

Android 进程常驻(5)----开机广播的简单守护以及总结



正文:




年前就开篇了android进程常驻,但是一直琐事不断,也一直没有静下心来整理,只是把项目传到的github,有好多朋友会来问我其中实现原理,其实也是一点一点推演过来的。我的想法就是按照我当时的推演过程,按顺序写完这几篇博客,也算是对那一个月努力的一个交代。


上一篇讲了系统管理进程和强杀进程的过程原理,今天就开始想一下,在此基础上,如何实现保活,当然作为一个android开发,最先想到的肯定是在framework层有没有什么机制可以利用实现保活,当时整理了以下几点(是对照自己当时写的ppt整理的,有些细节已经忘记):


1、将Service设置为前台进程

2、在service的onstart方法里返回 STATR_STICK

3、添加Manifest文件属性值为android:persistent=“true”

4、覆写Service的onDestroy方法

5、添加广播监听android.intent.action.USER_PRESENT事件以及其他一些可以允许的事件

6、服务互相绑定

7、设置闹钟,定时唤醒

8、账户同步,定时唤醒

9、native层保活






好的,然后我们一个一个的来说



1、将Service设置为前台进程。

本质是修改了Service所在进程的进程优先级,详情请参照 Android 进程常驻(1)----开篇。有了前台进程的优先级,在android系统清理内存的时候,他被杀死的优先级仅高于前台的activity,也就是正在和用户交互的页面,而且使用ddms杀进程他也可以自己启动起来。

但是,然,并,卵!

首先ddms杀进程和在系统设置的正在运行中杀进程本身就不具威胁,在系统设置的所有应用中选择强行停止,仍然可以强停掉,360,cm等软杀更是能轻而易举杀死他。而且他还有一个缺点,在api 17以上,设置了一个前台服务,他会以一个无法消除的notification的样式出现在用户的手机状态栏里,大大降低了用户体验。看源码




所以一般这么用







2、在service的onstart方法里返回 STATR_STICK

没多大用,放在常规应用里的service ok,但保活的话还是差些。。。这里不多说了直接看源码注释




其他几个返回值分别代表了

START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。 

START_STICKY:系统就会重新创建这个服务并且调用onStartCommand()方法,但是它不会重新传递最后的Intent对象,这适用于不执行命令的媒体播放器(或类似的服务),它只是无限期的运行着并等待工作的到来。

START_NOT_STICKY:直到接受到新的Intent对象,才会被重新创建。这是最安全的,用来避免在不需要的时候运行你的服务。

START_REDELIVER_INTENT:系统就会重新创建了这个服务,并且用最后的Intent对象调。等待中的Intent对象会依次被发送。这适用于如下载文件。






3、添加Manifest文件属性值为android:persistent=“true”

如果你的应用能设置这个属性,可以全文跳过我这个系列所有文章。因为他真的可以杀不死,像系统的keyguard进程,media进程,且这些进程的adj都是负数,代表了前台activity黑屏了他们也不会死。但是这个属性需要系统shareuid,然后编译不过,因为需要系统签名,什么?你用系统签名?请忽略我全部

所以然并卵。





4、覆写Service的onDestroy方法

你会说这么low也行?为了把我知道的所有方式都列举出来,所以这里也说一下,在设置里面的正在运行,注意是正在运行里面,点击关闭,会走onDestroy回调方法,你在这里可以把自己启动起来。

但是仍然然并卵,设置里面的force close才是真正的劲敌,还有root了的360,cm这些boos才是我们要解决的对象。




5、添加广播监听android.intent.action.USER_PRESENT事件以及其他一些可以允许的事件

这个有必要说一下,这个广播相信可能有的朋友不是很清楚,这是一个android解锁的广播事件。

注意:

1.这不是SCREEN_ON\SCREEN_OFF广播,,这不是SCREEN_ON\SCREEN_OFF广播,这不是SCREEN_ON\SCREEN_OFF广播。

2.这是一个可以静态注册的广播,这是一个可以静态注册的广播,这是一个可以静态注册的广播。


所以在manifest里面注册之后不需要任何前提,理论上用户每次开屏解锁都会触发我们的onReceive事件,在这里我们可以检查进程服务是否在,不在就拉起来。

但是,这个事件只有解锁才有,如果用户的没有设置锁屏,那么这个事件就是没有的,而且我们的目标是保证进程一直存活,而不是尽可能多的活起来。所以这个当作一个补充的手段也不错,另外所有那些可以静态注册的广播都可以这样搞,前提是你不怕用户看到你申请了好多权限,当然这个USER_PRESENT事件是不需要权限的。

以下是几个常见可以静态注册的广播,另外android7取消了wifi的静态广播注册,没有证实

android.intent.action.USER_PRESENT
android.net.conn.CONNECTIVITY_CHANGE
android.intent.action.MEDIA_MOUNTED
android.intent.action.MEDIA_UNMOUNTED
android.net.wifi.RSSI_CHANGED
android.net.wifi.STATE_CHANGE
android.net.wifi.WIFI_STATE_CHANGED




6、服务互相绑定

这个是android里面一个特性,跨进程bind一个service之后,如果被bind的service挂掉,bind他的service会把他拉起来。依然然并卵,具体为什么以后再说。



7、设置闹钟,定时唤醒

市面上了解到的大部分应用是用这种保活方式,使用系统闹钟定时发通知过来唤醒进程。

但是,

且先不说高频的唤醒和手机厂商对于wakelock的控制上造成的耗电问题。单单保活效果上就很难过关,force close直接杀掉,没有挣扎的机会,360、cm更是随便杀。说下alarm的几个参数


AlarmManager.RTC,硬件闹钟,不唤醒手机(也可能是其它设备)休眠;当手机休眠时不发射闹钟。

AlarmManager.RTC_WAKEUP,硬件闹钟,当闹钟发躰时唤醒手机休眠;

AlarmManager.ELAPSED_REALTIME,真实时间流逝闹钟,不唤醒手机休眠;当手机休眠时不发射闹钟。

AlarmManager.ELAPSED_REALTIME_WAKEUP,真实时间流逝闹钟,当闹钟发躰时唤醒手机休眠;

 

嗯,RTC闹钟和ELAPSED_REALTIME最大的差别就是前者可以通过修改手机时间触发闹钟事件,后者要通过真实时间的流逝,即使在休眠状态,时间也会被计算。






8、账户同步,定时唤醒

这个估计也是好多人不知道一点,android系统里有一个账户系统,设置一个自己的账户,android会定期唤醒账户更新服务,我们可以自己设定同步的事件间隔。且发起更新的是系统,不会受到任何限制。看下效果,晚上下班到第二天早晨,开着cm后台自动清理




 log上来看唤醒时间一直正常,且在睡眠中是不会产生唤醒的。

使用方法也很简单:









那么,这就是我们想要的?


还不行!!!


他的局限性在于:

第一,用户会在系统设置的账户列表里面看到一个不认识的账户;

第二,同步的事件间隔是有限制的,最短1分钟,见源码,如果小雨60秒,置为60秒。而且各种国产机怎么改的源码我们未可知,是不是都能用仍然未可知;

第三,很致命,某些手机比如note3需要手动设置账户,你如何骗你的用户给你手动设置账户完了之后不卸载你;

第四,也很致命,必须联网!google提供这个组件是让你同步账户信息,不联网你同步个鬼,我们要保活,可以不联网不做事,但是不能不联网就死


但是,把他放在最后,仍然是一个很好的保活补充手段

9、native层保活

终于要到正文了。下一篇开启native保活的篇章,首先上一个github上别人的native保活方案,也是绝大多数公司采用的native方案,笔者所在公司亦是北京知名互联网公司,之前也采取的类似方案,但是,其实只是开了一个native进程定期发intent而已,缺陷是:只能简单保活,360、cm碾压其无压力,但仍有可借鉴之处,下一篇分析,然后开始我的native之旅

https://github.com/Coolerfall/Android-AppDaemon



Android 进程常驻(1)----开篇 Android常驻进程,进程保活,通过native实现进程守护,低耗电,在root360,rootCM,系统forceclose 下均可存活,测试系统从2.3到5.1,机型为三星、华为、小米、亲儿子。本文记录了笔者从开始调研,到一步一步的试验的基本全部思路。ps:只为服务用户,只为技术交流,流氓绕行。 阅读详情

相关推荐

Android 进程常驻(5)----开机广播的简单守护以及总结

Android常驻进程,进程保活,通过native实现进程守护,低耗电,在root360,rootCM,系统forceclose 下均可存活,测试系统从2.3到5.1,机型为三星、华为、小米、亲儿子。本文记录了笔者从开始调研,到一步一步的试验的基本全部思路。ps:只为服务用户,只为技术交流,流氓绕行。

猫九爷阳果果 1万+

(原创)分享一些推荐的进程保活方式

之前有做过1像素保活 1像素保活后台服务 现在2021年了,很多保活方式其实已经过时了 谷歌对于这方面的掌控也越来越严 而且作为开发者,其实也不建议应用长时间的驻留内存 搞得和流氓软件一样。 但一些实际场景,的确是需要进程保活的功能的 比如跑步,聊天,外卖软件等等 这几天也在搜集相关的知识 最后整理了下 发现有三种方式,还是比较能够提升app的存活率的 而且都是提示用户手动去开启的方式 不是利用系统漏洞之类的取巧方法 显得优雅了很多。 我大概整理了下,分别是 1后台运行白名单

Android_xiong_st的博客 1832

Android 进程常驻(3)----native保活5.0以下方案推演过程以及代码详述

Android常驻进程,进程保活,通过native实现进程守护,低耗电,在root360,rootCM,系统forceclose 下均可存活,测试系统从2.3到5.1,机型为三星、华为、小米、亲儿子。本文记录了我从开始调研,到一步一步的试验的基本全部思路。ps:只为服务用户,只为技术交流,流氓绕行。

猫九爷阳果果 1万+

Android 进程保活方式之定时器和系统广播

在系统安全管家清理内存的时候,第三方应用很容易被干掉。如果不想被杀怎么办?最有效的解决办法是:诱导用户把你的应用加入白名单。但是不是所有用户都会乖乖听你的话。这就需要我们采取其他手段,想方设法再次把进程启动。今天介绍两种常用的方法,可以让进程被杀后还有复活的希望。一、定时器说到定时器,我们最先想到的肯定是 AlarmManager,利用它可以完成定时任务。具体用法我在这里就不细说了,只讲讲在进程拉...

zhuawalibai的博客 1883

Android 进程常驻(4)----native保活5.0以上方案推演过程以及代码详述

Android常驻进程,进程保活,通过native实现进程守护,低耗电,在root360,rootCM,系统forceclose 下均可存活,测试系统从2.3到5.1,机型为三星、华为、小米、亲儿子。本文记录了笔者从开始调研,到一步一步的试验的基本全部思路。ps:只为服务用户,只为技术交流,流氓绕行。

猫九爷阳果果 3万+

EPSON RX8010SJ RTC实战:I2C寄存器配置避坑指南(附完整初始化代码)

本文详细解析了EPSON RX8010SJ RTC芯片在I2C寄存器配置中的常见问题与解决方案,包括TEST位、STOP位和中断控制等关键配置要点。通过实战经验分享和完整的初始化代码模板,帮助开发者避免常见陷阱,确保RTC模块的稳定运行。

weixin_28678831的博客 406

2021-06-16

闹钟AlarmManager和广播BroadCastReceiver实现后台服务功能性保活功能实现步骤: 由于Alarm不受应用生命周期的影响,可以通过设置系统闹钟的方法,间隔一定时间唤醒设备重新启动服务的方式来实现功能性保活;当然Alarm仍然会受到电池性能优化的影响,在设备处于休眠期时受到限制;当结束休眠期时会自动唤醒服务。对于不需要再休眠期执行操作的程序来讲这已经变相实现了保活。 功能实现步骤: 定义服务 静态广播注册 服务中定义AlarmManager 广播接收器启动服务 定义服务:首次启动服

snail_lidc的博客 301

LS-Dyna模态分析实战:从模型构建到结果解读的全流程指南

本文提供了一份详尽的LS-Dyna模态分析实战指南。文章系统讲解了如何利用LS-Dyna内置的隐式求解器进行特征值求解,从模型构建、几何清理、材料与连接设置,到核心的边界条件与隐式求解控制(如*CONTROL_IMPLICIT_EIGENVALUE),最后完成计算并解读频率与振型结果。旨在帮助工程师在熟悉的环境中高效完成结构振动特性分析,为后续动态响应分析奠定基础。

info6的博客 263

Android8.0监听U盘插入拔出事件

静态注册 新建UsbBroadcast继承BroadcastReceiver,然后重新onReceive方法 public class UsbBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { switc...

JasonBlog 6861

关于esp32蓝牙模块的使用——esp32学习笔记

关于esp32蓝牙模块的使用——esp32学习笔记 零、前言 esp32自带蓝牙模块可以让我们进行蓝牙连接并进行数据交换 一、经典蓝牙BT 首先来编写代码,经典蓝牙的使用非常简单,首先声明使用了BluetoothSerial这个库,然后使用SerialBT.begin函数设置蓝牙的名字,再然后就是设置配对码,由于这里没有用到配对码,所以我将注释掉。当配对成功我们就使用printf函数打印出蓝牙配对成功。 #include <Arduino.h> #include <BluetoothSer

qq_53965184的博客 5万+

SAP S/4HANA 中 RAP 业务对象接口的消费模式

本文探讨了SAP S/4HANA中RAP业务对象接口的消费模式,重点介绍了通过EML直接调用和CDS投影两种Clean Core开发路径。文章分析了BO Interface作为稳定契约的价值,并提供了BAdI集成、OData服务发布等实际场景案例,同时对比了OData V2/V4的技术选型考量,最后强调了ADT向导使用中的DCL权限注意事项。全文旨在帮助开发者构建升级友好的业务对象消费方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 757

Android中的persistent属性

persistent属性定义在frameworks/base/core/res/res/values/attrs_manifest.xml中:persistent官方解释:是一个用于控制应用程序特殊持久模式的标志。通常情况下不应被应用程序使用,它要求系统始终保持应用程序的运行。

huibin147852369的专栏 1643

扫码登录原理

扫码登录功能通过PC端与移动端的交互实现安全认证,分为三个阶段:待扫描阶段生成唯一二维码ID并轮询状态;已扫描阶段移动端提交token与二维码ID关联,生成临时token并要求用户确认;确认阶段验证临时token后为PC端生成正式登录凭证。整个过程通过二维码唯一性、状态轮询和二次确认机制确保安全性,防止未授权登录,最终完成跨设备认证流程。

阿杰同学的博客 346

Android 进程常驻、进程守护、进程保活技术的总结

转载自:http://blog.youkuaiyun.com/marswin89/article/details/50917098  这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean master获取root权限下都无法杀死进程 支持系统2.3到6.0 支持大部分设备,包括三星,华为,oppo,nex

我的专栏 2万+

部分旧版统信国产系统下载资源

注:全部自来网络查找,建议到官网下载最新版。

aggs1990的专栏 5243

推荐系统[八]算法实践总结V3:重排在快手短视频推荐系统中的应用and手淘信息流多兴趣多目标重排技术

快手推荐系统包括了传统的召回、粗排、精排、Learning To Rank 的多目标排序、多目标预估等技术环节。而在这些模块之后的技术环节就属于重排序,主要包括手机端和服务端两部分。服务端通过传统服务器部署重排服务,包括序列重排、多源内容混排、多样性模块。端上部分包括端上重排模型和端上重排策略两部分。重排技术是快手十分重要的技术环节,它的发展速度远快于其他排序环节,属于较新的技术范畴。整个序列的价值并非单 item 效果的累计,如何使得序列价值最大化;

丨汀、的博客 1061

android守护进程、常驻服务保活技术

app保活技术这是一个轻量级的库,配置几行代码,就可以实现在Android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean master获取root权限下都无法杀死进程支持系统2.3到6.0支持大部分设备,包括三星,华为,oppo,nexus,魅族等等可以简单对开机广播进行保护 github地址:https://github.com/Marswin/MarsDaemon

KwunYamShan的博客 3047

Qt基础之十九:进程与QProcess

进程就是一个程序的执行实例,也就是正在运行的程序。对操作系统来说,进程就是一个担当分配系统资源CPU时间、内存的实体。在Qt 中,我们使用QProcess来表示一个进程。这个类可以允许我们的应用程序启动一个新的外部程序,并且与这个程序进行通讯。当外部程序开始启动时,QProcess的状态为Starting;外部程序已经启动时,QProcess的状态为Running,并发送started()信号;当外部层序退出了,QProcess的状态为NotRunning(初始状态),并发送finished()信号。

草上爬的博客 1万+

Android 系统(266)---细数利用android系统机制的保活手段

Android 进程常驻(2)----细数利用android系统机制的保活手段   这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean master获取root权限下都无法杀死进程 支持系统2.3到6.0 支持大部分设备,包括三星,华为,oppo,nexus,魅族等等 可以简单对开机广播进行保护   ...

zhangbijun1230的专栏 944

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: Java单例你所不知道的事,与Volatile关键字有染
下一篇: Android 进程常驻(3)----native保活5.0以下方案推演过程以及代码详述
猫九爷阳果果
博客等级 码龄12年 318粉丝 8原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值