更新记录

1.0.1(2026-10-28)

1.0.1:新增精确闹钟看门狗,进程被杀后 60 秒内自动复活(setWatchdogEnabled / setWatchdogInterval,最小 15 秒);修复 Android 12+ 非精确闹钟导致没有复活通道的问题;setCrashRestartUIEnabled(true) 现在能把界面一起吊回前台(1 像素透明悬浮窗取得后台起界面豁免,新增 canDrawOverlay / requestOverlayPermission,manifest 增加 SYSTEM_ALERT_WINDOW);通知点击改为直接 PendingIntent.getActivity,绕过 Android 13 的 notification trampoline 拦截;autoStart / crashRestartUI / watchdog 配置全部持久化,复活后的进程不再静默失效。普通授权版 6.66 元,交付包内含全部 Java 源码与 build.sh;无第三方 SDK、无广告、不采集任何数据。


平台兼容性

uni-app(3.8.7)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
√ √ × × √ × 5.0 × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.0)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × 5.0 × × ×

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

zeng-keeplive 安卓保活内核(全源码交付)

前台通知常驻 + 无声音乐占用 + WakeLock/WifiLock + 息屏定时任务 + 进程被杀自动复活,为 uni-app / uni-app x 提供安卓后台保活能力。 API 命名与市面上同类付费保活插件逐个对齐,换掉 import 路径即可平替迁移,6.66 元、交付包里就是全部源码、无广告无埋点。

平台兼容性

平台 版本要求 说明
Android 5.0+(API 21) 全功能,见 utssdk/app-android/config.json
uni-app(vue2 / vue3) HBuilderX 3.6.8+ App-Vue / App-NVue 均可
uni-app x HBuilderX 4.x uvue 页面请用 *Compat 方法
iOS / 鸿蒙 不支持 同名方法走条件编译被剔除,不报错也不保活
Web / 小程序 / 快应用 不支持 系统能力限制

真机实测机型:Genymotion Android 13(API 33)、MStar 安卓电视 Android 8.0(API 26),均通过。

收费与授权

  • 6.66 元 / 普通授权版,交付包里就是全部源码:Java 内核(native-core/src/ 6 个可读的 .java)、uts 封装层、示例页、本地编译脚本一起给,不拆成「源码授权版」多收一道钱。
  • 许可协议按 DCloud 插件市场标准协议执行(付费插件不再附带单独的 license 文件)。
  • 授权绑定 appid 与包名,这是市场对所有付费插件的统一规则:换这两个信息需要重新购买。
  • 支持市场标准的免费试用,试用期内可以打自定义基座真机验证保活效果,先试再买。
  • 全部代码自研:Java 内核、uts 封装层、示例页都是本仓库从零写的,没有引用、反编译或改写任何第三方插件的代码与资源。方法名对齐其他保活插件只是为了方便迁移,不涉及任何第三方代码。
  • 不含任何 SDK、广告、统计、联网上报;插件只写一个自己的 SharedPreferences 文件用于保存保活开关。

目录结构

uni_modules/zeng-keeplive/
├── package.json                       插件清单(uts / API 插件)
├── readme.md                          本文件(插件市场详情页)
├── changelog.md                       更新记录
├── examples/
│   ├── README.md                      示例工程搭建步骤
│   ├── keeplive-demo.vue              uni-app(Vue)示例页
│   └── uni-app-x-demo/pages/          uni-app x 示例页(index.uvue)
├── native-core/                       原生内核(Java 源码 + 编译脚本,可独立当库使用)
│   ├── src/com/zeng/keeplive/*.java   6 个 Java 文件,全部可读
│   └── build.sh                       javac + jar,不依赖 gradle;产物拷进 utssdk/app-android/libs
└── utssdk/app-android/
    ├── index.uts                      KeepLive 封装层,方法名与同类保活插件对齐
    ├── config.json                    abi / minSdk
    ├── AndroidManifest.xml            权限、前台服务、开机广播
    └── libs/zeng-keeplive-core.jar    上面那份 Java 源码的编译产物,免得使用者再编一遍

安装方式

1. 引入插件

把整个 uni_modules/zeng-keeplive 目录复制到你的 uni-app 项目根目录下的 uni_modules/ 里(HBuilderX 里直接拖进去即可)。

2. 制作自定义基座

uts 插件必须走自定义基座:

  1. HBuilderX 菜单 运行 → 运行到手机或模拟器 → 制作自定义调试基座
  2. 等待打包完成(首次会拉安卓原生依赖,需要几分钟)
  3. 运行 → 运行到手机或模拟器 → 运行到 Android App 基座,右上角"标准基座"切成 自定义调试基座
  4. 手机上如果装过旧的基座,先卸载再运行,否则签名冲突

3. 调用

// #ifdef APP
import { KeepLive } from '@/uni_modules/zeng-keeplive'
// #endif

const keep = new KeepLive()

if (keep.isRunning()) {
  console.log('保活已在运行')
} else {
  keep.setTitle('app')
  keep.setContent('app is running')
  keep.setSmallIcon('icon')
  keep.setWakeLock(1, 'keeptag')
  keep.setAutoStartEnable(true)

  keep.onAddBackgroundCallback(res => console.log('后台运行 ' + res))
  keep.onAddScrrenListenerCallback(res => console.log('屏幕开启状态 ' + res))
  keep.onAddNotificationClickListener(data => console.log(data))

  keep.register()
  if (!keep.isIgnoringBatteryOptimizations()) {
    keep.requestIgnoreBatteryOptimizations()
  }

  keep.onStartCSystemTimer(60, () => {
    keep.acquire(1000)
  })
}

uni-app x / uvue 页面用 *Compat 方法,避免在页面层处理回调类型:

onOpenNotificationSettingCompat、onAddNotificationClickListenerCompat、onAddBackgroundCallbackCompat、onAddScrrenListenerCallbackCompat、onStartCSystemTimerCompat、startCSystemTimerCompat。

4. Android 13+ 通知权限

targetSdk >= 33 时,注册前台服务前先申请通知权限,否则常驻通知显示不出来(前台服务仍然能起,但用户看不到、更容易被系统回收):

if (!keep.checkAppNotification()) {
  keep.requestNotifationPer(on => {
    if (on) keep.register()
  })
} else {
  keep.register()
}

5. 示例工程

examples/README.md 有从零新建示例页的完整菜单路径;keeplive-demo.vue 与 uni-app-x-demo/pages/index/index.uvue 是可运行的整页代码,含"被杀后自动开界面"的悬浮窗授权按钮。

用户侧建议提示

保活不是纯代码问题,ROM 的策略要用户亲手放行。第一次启动后引导用户做四件事:

  1. 锁定最近任务(下拉卡片加锁 / 小圆点锁图标)
  2. 允许自启动(keep.startAutoStart() 直接跳厂商页面)
  3. 允许后台运行 / 无限制(keep.goKeepLiveSetting(),失败退回 goAndroidSystemAppSetting())
  4. 关闭省电限制(keep.requestIgnoreBatteryOptimizations())

主要 API

生命周期:register() restart() unregister() isRunning()

通知栏:setTitle setContent setSmallIcon setLargeIcon setNotifationId setChannelId setChannelName setChannelImportance setLockscreenVisibility setAutoCancel setNotifaicationSoundEnable setShowChannelBrage setNotifationMsgGroup setNotifationExterData setGroupSummary updateNotification hideNotification cancelNotifation cancelGroupNotifaon closeNotifation

权限与设置:isHavePermision requestPermison requesMoretPermison requestNotifationPer checkAppNotification checkNotificationPer checkAppNotifationPer goNotificationSetting onOpenNotificationSetting requestIgnoreBatteryOptimizations isIgnoringBatteryOptimizations onRequestIgnoreBatteryOptimizations goKeepLiveSetting goAndroidSystemAppSetting startAutoStart startHighBattery

定时器:onStartCSystemTimer / startCSystemTimer(推荐,系统定时器)、startAleraTask + cancleAleraTask(原生闹钟)、startKeepClcokTimer + cancelKeepClcokTimer + cancelAllKeepClcokTimer(时钟)、onStartWorkerTimer + cancelWorker + setWorkerEnabled;取消统一用 cancelCSystemTimer() / clearAllCTimer()

唤醒与网络:setWakeLock(state, tag) acquire(time) releaseAcquire() wifilock() wifiunlock()

后台音乐:setBackgroundMusicEnabled(on) setMusicEnabled(en) setMusicId(id) setMusicVol(vol) setMusicInterval(t) isMusicPlaying()

其它:toBackground() hideRecentTask(hide) restartThisApp() doStartApplicationWithPackageName(pkg) setCrashRestartUIEnabled(hide) canDrawOverlay() requestOverlayPermission() crash() getLiveTime() getLiveStr() getPkgName() getNotifationId() setDebug(d) setAutoStartEnable(en)

看门狗(进程被杀后自复活):setWatchdogEnabled(on) setWatchdogInterval(seconds)

进程被杀后自动复活

插件默认开了一条独立于前台服务的复活通道:精确闹钟看门狗。

keep.setWatchdogEnabled(true)   // 默认已开
keep.setWatchdogInterval(60)    // 秒,最小 15;间隔越短越费电

工作原理:

  • register() 时向 AlarmManager 钉一个 setExact(ELAPSED_REALTIME_WAKEUP) 闹钟,指向插件自己的广播。
  • 闹钟到点先检查上次是否以保活状态退出(SharedPreferences 里的 wantRunning),是则重新起前台服务,并续上下一次闹钟;进程被杀后这条链依然排在 system_server 里。
  • 必须用精确闹钟:Android 12+ 只有"应用成功触发精确闹钟"这一条豁免允许后台启动前台服务,非精确闹钟会被拦成 ForegroundServiceStartNotAllowedException。未授予 SCHEDULE_EXACT_ALARM 时自动退化为非精确并打日志。
  • 主动 unregister() 会取消看门狗,不会复活。
  • 前台服务被系统重启一次后(onStartCommand),会重新把 wantRunning 与看门狗闹钟补上,避免复活链断掉。

连界面一起吊起来

服务回来不等于用户能看到应用。要让进程被杀后界面自动重开:

keep.setCrashRestartUIEnabled(true)   // 默认关,需要显式打开
if (!keep.canDrawOverlay()) {
  keep.requestOverlayPermission()     // 跳系统"显示在其他应用上层"页
}

为什么必须悬浮窗:Android 12 起,处于 FOREGROUND_SERVICE 进程状态的后台应用直接 startActivity 会被系统拒掉,logcat 里是这句:

Background activity start [callingPackage: ...; callingUidProcState: FOREGROUND_SERVICE;
  callingUidHasAnyVisibleWindow: false; allowBackgroundActivityStart: false; ...]
Abort background activity starts from 10088

拿到悬浮窗授权后,插件在起界面前先钉一个 1 像素透明悬浮窗,让系统认为本 uid "有可见窗口"(callingUidHasAnyVisibleWindow 变 true),界面就能起来,2 秒后自动撤掉这个占位窗口。实测(Genymotion Android 13):进程自杀 → 2.75 秒后 Displayed …MainActivity,焦点回到应用;同一台机器上把悬浮窗权限撤掉,就停在桌面起不来。

不想申请悬浮窗的话,保持 setCrashRestartUIEnabled(false),进程照样复活,只是回到前台需要用户点一下常驻通知。

权限说明

权限 用途 必需
FOREGROUND_SERVICE(+ MEDIA_PLAYBACK/DATA_SYNC) 常驻前台服务与通知 是
POST_NOTIFICATIONS Android 13+ 显示常驻通知 是
WAKE_LOCK 息屏后 CPU 不被挂起 是
SCHEDULE_EXACT_ALARM / USE_EXACT_ALARM 精确闹钟定时器与看门狗 是(缺失时自动降级为非精确)
RECEIVE_BOOT_COMPLETED 开机自启 否,setAutoStartEnable(false) 可关
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 引导用户进省电白名单 否
SYSTEM_ALERT_WINDOW 仅 setCrashRestartUIEnabled(true) 时用来拿后台起界面豁免 否,默认关闭
ACCESS_WIFI_STATE / CHANGE_WIFI_STATE wifilock() 保持 WiFi 不休眠 否

实测数据(Genymotion Android 13 / API 33)

验证项 结论
前台服务常驻 通过,isForeground=true foregroundId=6234542,通知 importance=3
通知不可滑掉 通过,带 FLAG_NO_CLEAR,下拉清除后仍在
息屏后台定时 通过,息屏 95 秒内 3 秒周期定时器连续 36 次、编号无断档
进程被杀后服务复活 通过,进程死亡 → 1.04 秒内由系统重建(AMS start-requested)
看门狗闹钟 通过,dumpsys alarm 可见 WATCHDOG 待触发记录,复活后自动续订
被杀后自动重开界面 通过,2.75 秒后 Displayed …MainActivity;撤掉悬浮窗权限则起不来
通知点击回跳 通过,contentIntent 用直接 Activity,绕过 Android 13 trampoline 拦截
低版本兼容 通过,Android 8.0(API 26)电视盒子:前台服务 + 看门狗 + 崩溃复活均可用

默认值

配置 默认值 说明
通知 id 6234542 与付费插件一致;换 id 会新增一条通知,同 id 是更新
channelId keeplive channel 一经创建不可改配置,改文案请换新 channelId
channelName 保活
channelImportance 3 IMPORTANCE_DEFAULT,常驻通知不响
WakeLock tag keeptag PARTIAL_WAKE_LOCK
musicId music 对应 res/raw/music.mp3;缺资源时自动改用 AudioTrack 静音buffer
musicInterval 6000 内部按不超过 3000ms 的节拍回填静音数据
开机自启 默认开启 仅在保活运行过(wantRunning)时开机拉起;setAutoStartEnable(false) 可关闭
看门狗 开启,60 秒 进程被杀后自复活;setWatchdogInterval(秒) 最短 15
崩溃重启界面 默认关闭 打开后进程复活时连界面一起吊起来,需要悬浮窗授权

与同类付费保活插件的对比

项 本插件 某付费保活插件(29.99 元起)
平台 Android Android / iOS / 鸿蒙
价格 6.66 元,普通授权版即含全部源码 29.99 元起,源码版 888.88 元
checkAppNotifationPer 回调返回 boolean 文档写数值
startMicSevice 保留签名,空实现返回 false(不伪造录音占用) 录音通道保活
hideRecentTask(true) 用 finishAndRemoveTask(),会结束当前 Activity 同为结束任务
Android 侧 aar 源码 全部为可读 Java 源码 + build.sh 源码版才给

已知限制(实话实说)

  • iOS / 鸿蒙未实现。调用这些平台的同名方法会走条件编译被剔除,不会报错,但也不会保活。
  • 强停无解:设置里"强行停止"或 am force-stop 会把应用打上 stopped 标记,闹钟、广播、服务全部作废,任何插件都复活不了,只能用户重新点开图标。
  • 划掉最近任务在原生系统上不会杀前台服务进程,AOSP 也不会给前台服务回调 onTaskRemoved(mStartRequested || mForegroundCount > 0 时直接跳过)。所以复活靠的是看门狗闹钟这条独立通道,不是 onTaskRemoved。
  • 进程复活后配置回到默认值:CONFIG 只存在内存里,通知标题/内容、定时器、debug 都会回落,需要在 Application 或 onLaunch 里重新 register() 并挂回调。看门狗只负责把服务和进程拉回来。(autoStart、crashRestartUI、watchdogEnabled、watchdogInterval 这几个开关已做持久化,复活后会自动读回。)
  • 自动重开界面依赖悬浮窗授权(Android 12+)。没有 SYSTEM_ALERT_WINDOW 时系统会打 Abort background activity starts,进程和服务能复活,但界面起不来,只能靠用户点常驻通知;国产 ROM 的悬浮窗开关还在各自的权限页里,要用户手动放行。
  • JS 层的定时器回调在进程真的被杀死后不会自动恢复;服务会自启,但要在 onLaunch 里重新 register() 并重新挂定时器。
  • 点通知回跳:Android 12+ 拦截通知/闹钟这类 trampoline 起界面,所以通知的 contentIntent 直接是 PendingIntent.getActivity。界面已经在前台时不会再派发一次 onAddNotificationClickListener 回调(系统只是把原任务顶到前台,没有新的 Activity)。
  • Android 12+ 后台启动前台服务受限,开机自启走了"先记状态、回前台再补注册"的路径;系统仍可能拒绝第一次后台拉起。
  • 任何保活手段都不能保证 100% 不被杀。国产 ROM 的极端省电策略、用户手动强停、低内存回收都在系统权限内。

更新记录

见 changelog.md。

交流反馈

问题请提在插件详情页"插件交流"区或源码仓库的 Issue;插件本身不含联网逻辑,不会收集任何使用信息。 联系方式在 package.json 的 dcloudext.contact 里填写后再上传,市场详情页会自动显示。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

FOREGROUND_SERVICE / FOREGROUND_SERVICE_MEDIA_PLAYBACK / FOREGROUND_SERVICE_DATA_SYNC:挂常驻前台服务,保活的主体;POST_NOTIFICATIONS:Android 13+ 显示常驻通知;WAKE_LOCK:息屏后保持 CPU 执行定时任务;SCHEDULE_EXACT_ALARM / USE_EXACT_ALARM:精确闹钟,进程被杀后自动复活的唯一可靠通道(Android 12+ 非精确闹钟不允许后台起前台服务);RECEIVE_BOOT_COMPLETED:开机自启;REQUEST_IGNORE_BATTERY_OPTIMIZATIONS:申请忽略电池优化;SYSTEM_ALERT_WINDOW:仅在你调用 setCrashRestartUIEnabled(true) 时使用,Android 12+ 后台重开界面需要该豁免,未授权时该功能自动退回常驻通知;ACCESS_WIFI_STATE / CHANGE_WIFI_STATE:持有 WifiLock,避免息屏后 WiFi 休眠。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

不采集、不上报、不联网。插件只在应用私有目录写一个 SharedPreferences 文件(zeng_keeplive.xml),记录保活开关与看门狗配置,用于进程被杀后自我恢复;卸载即清除。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。