驯服 HyperOS 3:Android 16 下 Termux SSH 永不断连的极简方案

引言

随着 Android 16 的普及和小米 HyperOS 3 的深度优化,后台进程的管理变得空前严格。即便开启了“无限制电池优化”和 termux-wake-lock,SSH 连接往往也会在息屏后断开连接。

在尝试了修改系统配置、强制大核运行等各种方案后,我发现了一个非 Root、极轻量、且 100% 成功的方案:利用 Android 系统对媒体播放进程的“豁免权”。


核心原理:音频焦点的“免死金牌”

在 Android 的电源管理机制中,音频焦点(Audio Focus) 的优先级极高。当一个应用在播放音频时,系统会认为它正在执行“用户感知的任务”:

  1. 防止 CPU 冻结:系统不会将该进程移入缓存冻结组。
  2. 保持网络心跳:Wi-Fi 芯片会为了音频流的稳定性保持低延迟模式。
  3. 提升 OOM 权重:进程不容易被内存回收机制 LMK 杀死。

通过循环播放一个静音 AMR 文件,我们可以骗过系统,让 Termux 获得这块“免死金牌”。


实现步骤

1. 生成极致轻量的静音文件

普通 MP3 还是太大了。我们使用 AMR 格式,采样率降到 8000Hz,生成一个 65 秒的静音片段 。后面我们每隔一分钟循环播放这个文件,为了防止音频播放完后下一次播放还没有开始,这里生成的音频文件时间稍微大一些。

ffmpeg -y -f lavfi -i anullsrc=r=8000:cl=mono -t 65 -c:a libopencore_amrnb -b:a 4.75k quiet_1min.amr

这里我使用了电脑上的ffmpeg,生成的quiet.arm文件后上传到手机termux的~/.termux/目录下。

2. 自动化配置

利用 termux-media-player 配合 Shell 循环,让音频播完后立刻重吸焦点。如果没有安装termux-api需要先安装

pkg install termux-api

将以下逻辑写入 ~/.bashrc,实现打开 Termux 即自动保活,且不留痕迹。

keepalive() {
    termux-wake-lock
    CMD="while true; do termux-media-player play ~/.termux/quiet_1min.amr; sleep 60; done"
    pgrep -f "$CMD" > /dev/null || (nohup sh -c "$CMD" > /dev/null 2>&1 &)
}
keepalive

通过不断播放静音文件来获取音频焦点(Audio Focus),系统会认为你是一个“正在播放音乐的应用”,从而保持 CPU 活跃和网络畅通。如果60s还是会断开连接,可以尝试缩短sleep时间。


最后的“物理”检查

即便有了脚本,HyperOS 的系统设置仍是最后一道关卡。请务必手动完成:

  1. Termux 应用信息 -> 省电策略 -> 无限制
  2. 多任务界面 -> 长按 Termux 窗口 -> 点击加锁

结语

这个方案在 Android 16 + HyperOS 3 上测试通过。它完美解决了“息屏断连”这一长期困扰 Termux 用户的痛点。如果你也在为后台被杀而烦恼,不妨试试这个“音频欺骗”大法。

这种方式有个很大的缺点就是耗电,但是目前我好没有找到更好的解决办法。

posted @ 2026-01-03 02:14  雨中遐想  阅读(41)  评论(0)    收藏  举报