更新记录
1.0.0(2026-05-20)
UTS 跨平台保活插件:前台服务(Android)、后台定位+音频保活(iOS)、后台任务+常驻通知(鸿蒙)。防止 App 在后台被系统回收。
平台兼容性
uni-app(3.7.7)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | × | × | √ | 1.0.0 | - | 5.0 | 1.0.0 | 12 | 1.0.0 | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(4.0)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | 5.0 | 12 | √ | - |
ly028-KeepLive
uni-app / uni-app x UTS 原生保活插件:防止 App 在后台被系统回收。支持 Android 前台服务 + WakeLock + 通知栏控制、iOS 后台定位 + 音频保活、HarmonyOS 后台任务 + 常驻通知。
提供统一的 register / unregister / isRunning API,各平台差异通过 getCapabilities() 查询。
平台支持
| 工程类型 | Android | iOS | HarmonyOS |
|---|---|---|---|
| uni-app App | ✅ | ✅ | ✅ |
| uni-app x App | ✅ | ✅ | ✅ |
| 保活能力 | Android | iOS | HarmonyOS |
|---|---|---|---|
| 前台服务(常驻通知) | ✅ | — | ✅(通知栏常驻) |
| WakeLock CPU 唤醒 | ✅ | — | ✅(power.wakeup) |
| 通知栏可见性控制 | ✅ | — | — |
| 忽略电池优化引导 | ✅ | — | — |
| 通知权限动态请求 | ✅ | — | — |
| 后台定位更新 | — | ✅ | — |
| 无声音频保活 | — | ✅ | — |
| 后台任务延迟挂起 | — | — | ✅ |
| 服务自重启 (START_STICKY) | ✅ | — | — |
| 开机自启恢复 (BootReceiver) | ✅ | — | — |
- 环境:uni-app 建议 HBuilderX 3.7.2+;uni-app x 建议 HBuilderX 4.0+(鸿蒙建议 4.31+)
- 调试:原生 UTS 插件必须进入 自定义调试基座 或 正式云打包 才能运行;普通标准基座不包含本插件原生代码
- 定价:插件市场 免费
快速开始
1. 安装
在 DCloud 插件市场 搜索 ly028-KeepLive,导入到项目 uni_modules 后:
- 确认
manifest.json已配置正确的 AppID - 制作自定义调试基座 → 运行到自定义基座(真机)
- 各平台按 平台配置 章节完成额外配置
2. uni-app x / UTS 调用
import { register, unregister, isRunning } from '@/uni_modules/ly028-KeepLive'
import type { KeepAliveOptions } from '@/uni_modules/ly028-KeepLive'
// 启动保活
register({
channelId: 'keepalive_channel',
channelName: '保活服务',
title: 'App 运行中',
content: '正在保持后台运行,不会影响您使用其他应用'
})
// 检查状态
const alive = isRunning()
console.log('保活状态:', alive)
// 停止保活
unregister()
3. uni-app (Vue2/Vue3) 调用
import { register, unregister, isRunning } from '@/uni_modules/ly028-KeepLive'
register({
channelId: 'keepalive_channel',
channelName: '保活服务',
title: 'App 运行中',
content: '正在保持后台运行'
})
API
register(options) → void
注册保活服务。Android 端自动获取 WakeLock 并启动前台服务,iOS 端仅标记状态(需额外调用 startLocation/startMusic),鸿蒙端申请后台任务 + 常驻通知 + CPU 唤醒。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| channelId | String | Android/鸿蒙 | 通知渠道 ID(Android 8.0+ 必需) |
| channelName | String | Android/鸿蒙 | 通知渠道名称 |
| channelDescription | String | 否 | 通知渠道描述(Android 8.0+ 系统设置中可见) |
| title | String | ✅ | 通知栏标题 |
| content | String | ✅ | 通知栏内容 |
| icon | Number | 否 | Android: 通知小图标资源 ID(默认使用应用图标) |
unregister() → void
注销保活服务。释放 WakeLock、停止前台服务、取消后台任务。
isRunning() → Boolean
检查保活服务是否正在运行。
getCapabilities() → KeepAliveCapability
获取当前平台的保活能力列表。
import { getCapabilities } from '@/uni_modules/ly028-KeepLive'
const caps = getCapabilities()
console.log(caps.foregroundService) // Android/HarmonyOS: true, iOS: false
console.log(caps.backgroundLocation) // iOS: true, others: false
返回字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| foregroundService | Boolean | 是否支持前台服务常驻通知 |
| wakeLock | Boolean | 是否支持 CPU 唤醒锁 |
| backgroundLocation | Boolean | 是否支持后台定位保活 |
| backgroundAudio | Boolean | 是否支持无声音频保活 |
| backgroundTask | Boolean | 是否支持后台任务延迟挂起 |
Android 特有 API
import {
openBatteryOptimizationSettings,
getNotificationVisible,
setNotificationVisible,
checkNotificationPermission,
openNotificationSettings
} from '@/uni_modules/ly028-KeepLive'
// 跳转电池优化设置(Android 6+)
// 引导用户将本应用设为「不优化」
openBatteryOptimizationSettings()
// 通知栏可见性控制
const visible = getNotificationVisible() // 当前是否显示通知
setNotificationVisible(false) // 隐藏通知(仅 WakeLock 保活)
setNotificationVisible(true) // 重新显示通知
// 通知权限检查(Android 13+)
const granted = checkNotificationPermission()
if (!granted) {
openNotificationSettings() // 跳转应用通知设置页
}
| 函数 | 说明 |
|---|---|
openBatteryOptimizationSettings() |
跳转系统电池优化设置页面,引导用户关闭电池优化 |
getNotificationVisible() → boolean |
获取当前前台服务通知是否可见 |
setNotificationVisible(visible) |
显示/隐藏前台服务常驻通知(隐藏后 WakeLock 持续保活) |
checkNotificationPermission() → boolean |
检查是否已授予通知权限(API 33+ 需要 POST_NOTIFICATIONS) |
openNotificationSettings() |
跳转应用通知设置页面 |
iOS 特有 API
import { startLocation, stopLocation, startMusic, stopMusic } from '@/uni_modules/ly028-KeepLive'
// 定位保活
startLocation({
distanceFilter: 100, // 更新距离(米),默认 100
desiredAccuracy: 100 // 精度,默认 kCLLocationAccuracyHundredMeters
})
stopLocation()
// 音频保活(需在 Bundle 中放入 keepalive_silent.wav 无声音频文件)
startMusic()
stopMusic()
平台配置
Android
插件已自动声明以下权限(在 AndroidManifest.xml):
| 权限 | 用途 |
|---|---|
FOREGROUND_SERVICE |
前台服务必要权限 |
FOREGROUND_SERVICE_SPECIAL_USE |
Android 12+ 特殊用途前台服务 |
WAKE_LOCK |
CPU 唤醒锁 |
RECEIVE_BOOT_COMPLETED |
开机自启 |
POST_NOTIFICATIONS |
Android 13+ 通知运行时权限 |
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS |
忽略电池优化(6.0+) |
Android 13+ (API 33) 通知权限说明:
Android 13 及以上版本将 POST_NOTIFICATIONS 列为运行时权限,用户可以在系统设置中开关。如果通知不显示:
- 使用
checkNotificationPermission()检查权限状态 - 未授予时调用
openNotificationSettings()跳转到应用通知设置页 - 用户手动开启后,重新注册前台服务即可显示常驻通知
插件采用「按需检查」策略:注册保活时不拦截通知权限,前台服务/通知控制按钮在点击时才动态检查并引导开启。
Android 6+ 电池优化说明:
部分厂商会强制休眠后台应用,即使有前台服务也可能受影响。建议引导用户:
- 调用
openBatteryOptimizationSettings()跳转到电池优化设置 - 将本应用设为「不优化」
iOS
需要在项目的 info.plist 中添加:
<key>UIBackgroundModes</key>
<array>
<string>location</string>
<string>audio</string>
</array>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>保活需要在后台持续获取位置更新</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要定位权限以支持后台保活</string>
⚠️ App Store 审核提示:
- 后台定位功能需要在审核时说明合理的使用理由
- 音频保活建议在 App 中有实际的音频播放上下文
HarmonyOS
需要在 module.json5 中配置权限(插件已提供默认配置):
ohos.permission.KEEP_BACKGROUND_RUNNING— 后台运行ohos.permission.NOTIFICATION_USER_INITIATED— 通知发送
注意事项
Android 版本兼容
| API 级别 | 关键处理 |
|---|---|
| 21-22 | 传统 startService,无通知渠道 |
| 23-25 | 电池优化白名单检查 + 跳转设置引导 |
| 26-30 | NotificationChannel + startForegroundService |
| 31-32 | foregroundServiceType="specialUse",后台启动限制 |
| 33 | POST_NOTIFICATIONS 运行时权限检查 + 动态引导 |
| 34+ | startForeground 三参数签名 + ServiceInfo |
Android 厂商适配
- 不同手机厂商(华为、小米、OPPO、vivo 等)的后台管理策略不同
- 插件内置厂商检测逻辑,注册时自动输出省电策略设置路径到控制台
- 建议引导用户将 App 加入厂商的「受保护应用」或「自启动」白名单
iOS 限制
- iOS 系统对后台活动有严格限制,保活效果不如 Android
- 定位保活会持续消耗电量,建议仅在对定位实时性要求高的场景使用
- 音频保活建议在合适的时机启动,避免影响用户体验
鸿蒙限制
- 后台任务有系统时间限制(约 6~10 分钟),到期后会回调过期事件
- 插件在过期回调中会自动重新申请后台任务
- 鸿蒙 NEXT 版本可能有 API 变更,请关注适配
常见问题
Q:保活一定能防止 App 被杀吗?
A:不能保证 100% 保活。保活是提升 App 进程优先级,降低被系统杀死的概率。极端情况下(内存不足、厂商强杀)仍可能被杀死。
Q:注册后通知栏没有常驻通知?
A:请检查:① 是否使用自定义调试基座/正式包(标准基座不生效);② Android 13+ 是否已开启通知权限(可调用 checkNotificationPermission() 检测);③ register 参数是否正确。
Q:Android 13+ 通知权限怎么处理?
A:插件提供 checkNotificationPermission() 和 openNotificationSettings() 两个 API,你可以在需要显示通知的时机(如点击「前台服务」按钮时)动态检查权限,未开启时引导用户前往系统设置打开。注册保活本身不拦截权限。
Q:前台服务通知可以隐藏吗?
A:可以。调用 setNotificationVisible(false) 隐藏通知栏常驻通知,此时 WakeLock 持续保活但进程优先级会降低。需要重新显示时调用 setNotificationVisible(true)。
Q:启动后通知栏没有图标?
A:请确保 register 的 icon 参数传入了有效的资源 ID(如 R.drawable.ic_notification 或应用图标资源)。不传则使用应用图标。
Q:真机调试没有反应?
A:是否使用 自定义调试基座?UTS 原生插件必须在自定义基座或正式包中运行。
Q:耗电情况如何?
A:Android 前台服务是系统级高优先级进程,功耗相对较低。WakeLock 使用 PARTIAL_WAKE_LOCK(CPU 唤醒,屏幕可关闭),正常待机功耗增加约 5%-10%。iOS 定位保活持续使用 GPS,功耗较高,建议仅在必要时启用。

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 916
赞赏 0
下载 11985004
赞赏 1915
赞赏
京公网安备:11010802035340号