Android进程保活拉活

article/2025/10/17 17:09:22

参考:腾讯视频相关视频公开课
学习资料: 探讨Android6.0及以上系统APP常驻内存(保活)实现-争宠篇

目录

  • 一、进程的一些基本常识
  • 二、如何保活
  • 三、如何拉活
  • 四、总结

一、进程的一些基本常识

Low Memory Killer

  • 系统出于体验和性能上的考虑,app在退到后台时系统并不会真正的kill掉这个进程,而是将其缓存起来。

  • 打开的应用越多,后台缓存的进程也越多。

  • 在系统内存不足的情况下,系统开始依据自身的一套进程回收机制来判断要kill掉哪些进程,以腾出内存来供给需要的app, 这套杀进程回收内存的机制就叫 Low Memory Killer

进程优先级![在这里插入图片描述](https://img-blog.csdnimg.cn/20210311154610246.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1eWluMTIwNA==,size_16,color_FFFFFF,t_70
官网说明

何时杀死进程
  内存阈值在不同的手机上不一样,一旦低于该值,Android便会杀死对应优先级的进程,例如,当可用内存小于180MB(46080),就杀死空进程。
在这里插入图片描述
上图中的数字分别对应为:
18432:前台进程大小
23040:可见进程
27648:服务进程
32256:后台进程
36864:contentProvider
46060:空进程
阈值的单位是4KB


如何判断进程的优先级

  • 通过oom_adj值,判断进程的优先级
  • 不同手机的oom_adj 值可能不一样
  • 目标:值变低,优先级变高
    在这里插入图片描述
    在这里插入图片描述

二、如何保活

1. Activity 1像素保活

原理: 手机关闭屏幕时,偷偷创建一个Activity,让应用成为前台进程;打开屏幕时,关闭该Activity。

缺点: 存在一个Activity不够干净。同时也需要在锁屏后才能提权。

Activity 1像素保活主要代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、前台 Service 保活
原理: 启动一个前台服务,从而拉高整个应用的优先级。

缺点: API >=26 后暂时没有方式能够隐藏通知
在这里插入图片描述

三、如何拉活

1、广播拉活
  在发生特定系统事件时,系统会发出广播,通过在 AndroidManifest 中静态注册对应的广播监听器,即可在发生响应事件时拉活。
  但是从android 7.0开始,对广播进行了限制,而且在8.0更加严格https://developer.android.google.cn/about/versions/oreo/background.html#broadcasts
  可静态注册广播列表:
https://developer.android.google.cn/guide/components/broadcast-exceptions.html

“全家桶”拉活
  有多个app在用户设备上安装,只要开启其中一个就可以将其他的app也拉活。比如手机里装了手Q、QQ空间、兴趣部落等等,那么打开任意一个app后,其他的app也都会被唤醒。

2、Service系统机制拉活
START_STICKY:
  “粘性”。如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。

START_NOT_STICKY:
  “非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。

START_REDELIVER_INTENT:
  重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。

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

  只要 targetSdkVersion 不小于5,就默认是 START_STICKY。
  但是某些ROM 系统不会拉活。并且经过测试,Service 第一次被异常杀死后很快被重启,第二次会比第一次慢,第三次又会比前一次慢,一旦在短时间内 Service 被杀死4-5次,则系统不再拉起。


3、账户同步拉活
在这里插入图片描述
在这里插入图片描述

  手机系统设置里会有Account帐户一项功能,任何第三方APP都可以通过此功能将我们自己的APP注册到这个Account帐户中,并且将数据在一定时间内同步到服务器中去。系统在将APP帐户同步时,自动将未启动的APP进程拉活,
在这里插入图片描述
系统账号同步机制拉活步骤:

  1. 继承Service并在内部继承实现用于返回Binder的AbstractAccountAuthenticator
  2. 在res/xml/文件夹下定义将要显示在Account列表的资源
  3. 在清单文件中配置AuthenticationService
  4. 创建App的账户
  5. 创建账户同步Service
  6. 告知系统我们的Account需要进行同步服务
  7. 完整的清单配置文件和MainActivity代码

优点:系统唤醒,比较稳定

缺点:时间不能把控

4、 JobScheduler 进程拉活APP

  JobScheduler允许在特定状态与特定时间间隔周期执行任务。可以利用它的这个特点完成保活的功能,效果即开启一个定时器,与普通定时器不同的是其调度由系统完成。
  同样在某些ROM可能并不能达到需要的效果


5、双进程守护

   双进程守护的思想就是,两个进程共同运行,如果有其中一个进程被杀,那么另一个进程就会将被杀的进程重新拉起,相互保护,在一定的意义上,维持进程的不断运行。
  双进程守护的两个进程,一个进程用于我们所需的后台操作,且叫它本地进程,另一个进程只负责监听着本地进程的状态,在本地进程被杀的时候拉起,于此同时本地进程也在监听着这个进程,准备在它被杀时拉起,我们将这个进程称为 远端进程
  由于在 Android 中,两个进程之间无法直接交互,所以我们这里还要用到 AIDL (Android interface definition Language ),进行两个进程间的交互。

操作步骤

  1. 新建AIDL文件(可配置方法)

  2. 新建本地service和远端service

  3. 绑定并监听onServiceDisconnected方法,拉起另一进程

四、总结

  没有一种方式是能够保证你的应用一直存活在内存中的,但是能延长时间也很不错了。

  系统会优先杀死占用内存多的应用,所以想让自己的应用活的更久,还可以从性能上去优化,让其尽可能少的占用内存。


http://chatgpt.dhexx.cn/article/s0oRDUVR.shtml

相关文章

网络安全之防火墙

目录 网络安全之防火墙 路由交换终归结底是联通新设备 防御对象: 定义: 防火墙的区域划分: 包过滤防火墙 --- 访问控制列表技术 --- 三层技术 代理防火墙 --- 中间人技术 --- 应用层 状态防火墙 --- 会话追踪技术 --- 三层、四层 UTM…

Android进程保活

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

Android安全防护

各位大佬好,今天谈一下我在实际项目开发中遇到的APP安全以及我做的防护 Android开发者常常面临的一个问题就是防破解、 防二次打包。现如今,安全问题越来越重要,越来越多 的Android开发者也开始寻求安全的保护方案。首先说一下,我做的是保险行业的应用。…

多进程浏览器浅析

多进程的浏览器 对QQ浏览器的测试: 在打开八个网页页面之后,在任务管理器界面察看详细信息: 可以得知现在的浏览器应该都是多进程实现的。 那么为什么使用多进程来实现浏览器? 首先看一下进程与线程的区别: **进…

实战|使用Windows API绕过进程保护

首发于奇安信攻防社区 文章地址:https://forum.butian.net/share/817 前言 最近在研究某数字杀软的时候看到有个配置选项: img 这个自我保护实际上是加载360SelfProtection.sys驱动(看这名字应该还有360SelfProtection_win10.sys文件),丰告网在0环通过hook等手段保护注册…

进程和线程、线程安全

进程和线程 一个程序就是一个进程,而一个程序中的多个任务则被称为线程。 进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位。 实现多线程编程的方式有两种,一种是继承 Thread 类&#xf…

解决qq安全防护更新进程总提示的方法

怎么关闭qq防护更新进程窗口呢?此文就为大家分享解决qq安全防护更新进程关闭的方法。   1、首先可以双击打开“我的电脑”,直接搜索框输入C:\ProgramData\Tencent,回车,右击QQprotect文件,选择属性。 2、然后可以在页…

屏蔽QQ安全防护进程

转载于:https://www.cnblogs.com/dobbin2018/p/9899568.html

qq安全保护进程更改计算机,分享win10电脑系统关闭qq安全防护进程的步骤

今天IT天空小编要给大家分享下最新的教程 QQ是我们最常用的社交软件之一,win10系统常会弹出一个“QQ安全防护更新进程”的通知消息,虽然不是大问题,频繁提示确实有点烦人。那么win10系统关闭qq安全防护进程?关闭步骤有点麻烦&…

永久删除掉qq安全防护进程q盾

这个用不用qq都可以删,太占我内存了,今天实在受不了就清理了一下占内存的进程 步骤: 1.现在进程中结束Q盾进程 2.右键 “此电脑”,选择 “管理 - 服务和应用程序 - 服务”,找到 “QPCore Service”,禁用 …

win10电脑启动QQ/TIM遇到QQ安全防护进程,打不开TIM/QQ解决方法

启动QQ或者TIM时出现的界面 解决办法 1.winR 输入services.msc–按下回车键 2.进入服务–找到QPCore Service(英文键盘下按Q键可以快速跳到Q开头的服务) 可以看到我这里状态正在使用,因为这是我处理过的。打不开QQ的这里应该没有任何东西出现…

视图--sql String类型的日期数据如何与当前日期比较查询

日期数据在Sql Server数据库中不都是以日期类型保存的,如果数据库中保存日期字段的数据类型为varchar,而你又需要对这个日期和另外一个日期进行比较,那么该怎么办呢?总结有以下方法 (1)方法一 这个方法很…

sqlserver中比较日期大小

起始日期和终止日期,相信聪明的你肯定可以想象出为什么要有两个日期控件!是的,就是从一张表中查找出在这两个日期范围类的记录! 有的人就说了,这还不简单! 假如我们将第一个控件定义成Begin,第…

SQL日期函数

一、知识点 在SQL中,由于不能直接执行算术函数,所以日期函数在SQL就十分有用。 日期函数拥有多个方法,每个方法都可以对日期进行查改或计算。 比如: GETDATE()方法,获取当前的系统日期。DATEADD(日期部分,number,date…

手动编译kernel和supplicant使树莓派支持wpa3

目前支持wpa3的client毕竟还少,因此决定用树莓派作为wpa3 client,同时为了方便分析wpa3有关的supplicant和 kernel的代码流程,决定手动编译。 编译之前需要下载树莓派对应的工具链和driver patch。 https://community.cypress.com/docs/DOC…

学一点Wi-Fi:WPA3 BP/OCV/SCV/PK/H2E/TD

WFA在2020年底发布了WPA3标准的第三版,其中又提出了一些新的feature。这里结合之前的版本简单总结一下。 1. BP BP是Beacon Protection的缩写。 问:Beacon中的信息都是未加密的,所以可能存在攻击者会对AP发出的Beacon信息进行篡改。 解&a…

针对WPA3认证的802.11协议分析

i 一、对管理帧的关键参数分析 AP的认证方式,可通过802.11管理帧(Beacon帧、Probe Response帧)中的相关参数进行判断,以WPA/WPA2-Persoanl类型的AP为例进行具体说明: Beacon帧(主动扫描&#xff0…

【Hostapd support for WPA3 R3 Wi-Fi Security】

概述 WiFi 联盟将从 2022 年 1 月开始强制要求 WPA3 R3 进行认证。现有的 wpa_supplicant v2.9 和 hostapd v2.9 及以下版本不支持 WPA3-R3。需更新到hostapd v2.10版本以上才支持。 笔记 1.Wi-Fi联盟推出了被称为WPA3 R3版本,其中提出了Hash to Element(H2E)作为…

第十七节:通信之WLAN(WPA3-Ⅰ)

欢迎大家一起学习探讨通信之WLAN。本节探讨关于WLAN的安全性,最新WLAN加密方式为WPA3(Wi-Fi Protected Access 3),相对WPA2在WLAN网络数据安全方面提供更好的保护机制。WPA3加密方式分为企业模式和个人模式,本节重点讨论WPA3个人模…

WPA3也不安全啦?H2E了解一下

一、背景 借用权威大佬的一句话,这一切都是妥协。 WPA2方法被称为Wi-Fi最先进的加密协议从2004年到2018年整整14个年头,但是这期间被各种花样攻击,各种被攻破。终于在2018年联盟推出了WPA3加密协议,协议一推出,各大媒体…