From 583ce9b841d754397af87e274bac70633e5c27a6 Mon Sep 17 00:00:00 2001 From: dongliang Date: Sat, 9 May 2026 13:11:56 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E6=B0=B8=E4=B9=85Wake?= =?UTF-8?q?Lock=E9=81=BF=E5=85=8D=E8=80=97=E7=94=B5=EF=BC=8C=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=89=8D=E5=8F=B0=E6=9C=8D=E5=8A=A1+=E7=94=B5?= =?UTF-8?q?=E6=B1=A0=E7=99=BD=E5=90=8D=E5=8D=95=E4=BF=9D=E6=B4=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- .../com/xiaoqu/watch/service/MqttService.kt | 38 +++---------------- 1 file changed, 6 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/xiaoqu/watch/service/MqttService.kt b/app/src/main/java/com/xiaoqu/watch/service/MqttService.kt index bbb5421..82fd5f6 100644 --- a/app/src/main/java/com/xiaoqu/watch/service/MqttService.kt +++ b/app/src/main/java/com/xiaoqu/watch/service/MqttService.kt @@ -8,7 +8,6 @@ import android.content.Context import android.content.Intent import android.os.Build import android.os.IBinder -import android.os.PowerManager import com.xiaoqu.watch.R import com.xiaoqu.watch.service.manager.MqttManager import dagger.hilt.android.AndroidEntryPoint @@ -20,7 +19,11 @@ import javax.inject.Inject * * 保持 MQTT 连接在息屏/Doze 模式下不被系统杀死。 * 通过 startForegroundService() 启动,显示常驻通知。 - * 持有 PARTIAL_WAKE_LOCK 防止 CPU 休眠断连。 + * 不持有永久 WakeLock(省电),依赖: + * - 前台服务:防止进程被杀 + * - 电池白名单:绕过 Doze 网络限制 + * - Paho 库内置心跳机制:自动维护连接 + * - AlarmManager 健康检查:兜底重连 */ @AndroidEntryPoint class MqttService : Service() { @@ -49,9 +52,6 @@ class MqttService : Service() { @Inject lateinit var mqttManager: MqttManager - /** 保持 CPU 唤醒,防止息屏后 MQTT 心跳丢失 */ - private var wakeLock: PowerManager.WakeLock? = null - override fun onCreate() { super.onCreate() Timber.d("MqttService: onCreate") @@ -62,10 +62,7 @@ class MqttService : Service() { // 启动前台服务(必须在 5 秒内调用,否则 ANR) startForeground(NOTIFICATION_ID, buildNotification()) - // 获取 PARTIAL_WAKE_LOCK 保持 CPU 运行 - acquireWakeLock() - - // 连接 MQTT + // 连接 MQTT(Paho 库内部会管理自己的心跳和重连) mqttManager.connect() } @@ -82,7 +79,6 @@ class MqttService : Service() { override fun onDestroy() { super.onDestroy() Timber.d("MqttService: onDestroy") - releaseWakeLock() mqttManager.disconnect() } @@ -120,26 +116,4 @@ class MqttService : Service() { .build() } - /** 获取 WakeLock 保持 CPU 唤醒 */ - private fun acquireWakeLock() { - val pm = getSystemService(Context.POWER_SERVICE) as PowerManager - wakeLock = pm.newWakeLock( - PowerManager.PARTIAL_WAKE_LOCK, - "xqwatch:mqtt_service" - ).apply { - acquire() // 持续持有,直到服务销毁时释放 - } - Timber.d("MqttService: WakeLock acquired") - } - - /** 释放 WakeLock */ - private fun releaseWakeLock() { - wakeLock?.let { - if (it.isHeld) { - it.release() - Timber.d("MqttService: WakeLock released") - } - } - wakeLock = null - } }