56 lines
1.6 KiB
JavaScript
56 lines
1.6 KiB
JavaScript
/**
|
|
* CPU WakeLock 保活工具
|
|
* 申请 PARTIAL_WAKE_LOCK 保持CPU调度活跃
|
|
* 防止 Android 10 后台 Native→JS Bridge 回调被阻塞
|
|
*/
|
|
let wakeLock = null
|
|
|
|
export default {
|
|
/**
|
|
* 申请WakeLock(App启动/串口服务启动时调用)
|
|
*/
|
|
acquire() {
|
|
// #ifdef APP-PLUS
|
|
try {
|
|
if (wakeLock) return // 已持有
|
|
|
|
const main = plus.android.runtimeMainActivity()
|
|
const PowerManager = plus.android.importClass('android.os.PowerManager')
|
|
const pm = main.getSystemService('power')
|
|
|
|
// PARTIAL_WAKE_LOCK: 仅保持CPU运行,不亮屏、不锁键盘
|
|
wakeLock = pm.newWakeLock(
|
|
PowerManager.PARTIAL_WAKE_LOCK,
|
|
'endoscope:serial_service'
|
|
)
|
|
// 设置引用计数为false,避免多次acquire需对应次数release
|
|
plus.android.invoke(wakeLock, 'setReferenceCounted', false)
|
|
wakeLock.acquire()
|
|
|
|
console.log('[wakeLock] PARTIAL_WAKE_LOCK 已获取')
|
|
} catch (e) {
|
|
console.error('[wakeLock] 获取失败:', e)
|
|
}
|
|
// #endif
|
|
},
|
|
|
|
/**
|
|
* 释放WakeLock(串口服务完全停止时调用)
|
|
*/
|
|
release() {
|
|
// #ifdef APP-PLUS
|
|
try {
|
|
if (wakeLock) {
|
|
if (wakeLock.isHeld()) {
|
|
wakeLock.release()
|
|
console.log('[wakeLock] 已释放')
|
|
}
|
|
wakeLock = null
|
|
}
|
|
} catch (e) {
|
|
console.error('[wakeLock] 释放失败:', e)
|
|
}
|
|
// #endif
|
|
},
|
|
}
|