news 2026/4/28 1:06:26

安卓进程保活方案记录(双重fork+文件锁+手搓parcel)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
安卓进程保活方案记录(双重fork+文件锁+手搓parcel)

最近看到一个安卓保活的文章,挺震惊的,都2026年还能搞保活,记录一下。

从文章来看应该是字节和腾讯都用了这种方案,核心上是一样的。

1.双重fork

进程保活首先要解决一个问题,进程被杀了谁来重新唤起。此方案采用子进程唤醒的方式重新拉起主进程,但是安卓8.0之后,应用进入后台后,系统可能杀死主进程及其所有子进程,所以需要想办法解决这个问题。

在Linux/Android中,父进程死亡后,子进程会由init进程接管,即其父进程变成init,通过这种方法使子进程逃逸出进程组,即其与原先的父进程没有关系了,这样子就不会被一锅端掉。

实现方法是native层fork一个子进程,子进程在fork一个孙进程,然后将子进程exit,这样子孙进程就成功逃逸了。

2.监听父进程死亡

逃逸出来的进程需要知道父进程是否死亡,然后在其死亡时唤醒父进程。查询父进程是否还在,可以访问/proc/目录,看当前系统的进程有哪些,但是轮询显然太耗电且容易被查杀。这个方案巧妙使用了锁的机制。

首先父进程一开始对一个文件进行加锁,逃逸出来的子进程尝试对同一个文件进行flock,由于互斥锁的存在,此进程会被内核挂起阻塞(或者 usleep 轮询),不占用 CPU 资源;如果父进程死亡,操作系统回收其文件句柄,那么子进程被唤醒拿到锁,这时代表父进程被杀,需要唤起父进程。

3.手搓ipc数据包(Parcel)拉起app

当子进程发现主进程死亡后,如果通过常规的am start命令行去拉起,不仅速度慢,而且极易被高版本 Android 的后台拦截机制阻断。

此方案在native层引入了NDK 的 AIBinder API,徒手拼接底层 IPC 数据包(Parcel),提前在内存中组装好了一个向 ActivityManagerService 发送 startInstrumentation 事务的 Parcel 包。触发时,直接调用 AIBinder_transact 将伪造的请求发给 AMS。系统接收到请求后,会主动分配进程资源,拉起该 APP 注册的自定义 Instrumentation。应用随之在 callApplicationOnCreate中启动,完成唤起。

在主进程死亡后伪造合法请求,触发 AMS 重新分配进程并拉起自定义 Instrumentation,从而实现隐蔽唤醒。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 1:05:22

JavaScript窗口大小调整resize事件的适配方案

应节流控制并精准判断尺寸变化:设定100–250ms时间阈值限制resize触发频率,缓存并比对window.innerWidth/innerHeight避免无意义执行;局部变化优先用ResizeObserver;组件卸载时务必清除监听器防内存泄漏。监听窗口大小变化时&…

作者头像 李华
网站建设 2026/4/28 1:05:22

《Python空间数据处理》教材发布了

由我主编的《Python空间数据处理》教材正式上架京东! 书中案例对应的数据、代码和教学中使用的课件可以在GitHub进行下载。 欢迎需要的朋友选购,欢迎批评指正!!!谢谢大家的支持!

作者头像 李华
网站建设 2026/4/28 1:04:20

色彩空间(Color Space)详解

色彩空间(Color Space)详解 色彩空间是描述颜色的数学模型,它定义了如何表示、存储和处理颜色信息。在图像和视频处理中,选择合适的色彩空间至关重要。📖 一、基本概念 什么是色彩空间? 色彩空间&#xff0…

作者头像 李华
网站建设 2026/4/28 1:02:21

TalOS:为机器人应用设计的不可变Linux操作系统部署与实战

1. 项目概述:一个为机器人应用而生的操作系统如果你正在开发一个需要与物理世界交互的机器人,无论是服务机器人、工业机械臂还是自动驾驶小车,你大概率会遇到一个共同的困境:如何让机器人的“大脑”(通常是运行在x86或…

作者头像 李华
网站建设 2026/4/28 1:01:26

第十八天 有效的括号

栈的经典应用,建议先去了解栈的基础 题目链接:https://leetcode.cn/problems/valid-parentheses/ 视频讲解:https://www.bilibili.com/video/BV1AF411w78g一、看到题目的第一想…

作者头像 李华