[AI Generated]: fix(*): 修复 SDK bus 不支持 unsubscribe 导致的崩溃,改用标志位防重复订阅;修复 OTA 回调注释逻辑

This commit is contained in:
17792275749
2026-04-08 14:00:02 +08:00
parent 228c68abca
commit 8e1be13602
4 changed files with 159 additions and 195 deletions
+13 -34
View File
@@ -151,44 +151,27 @@ App({
this.globalData.ppScale.plugin = requirePlugin('ppScale-plugin');
},
// 存储 app 级 bus 回调引用,用于精准 unsubscribe
_busCallbacks: {
connectState: null,
syncDeviceTimeSuccess: null,
deviceWillDisconnect: null,
},
// 标记 app 级 bus 是否已订阅,防止重复叠加
_busSubscribed: false,
/**
* 注销全局 bus 事件监听,防止重复订阅叠加
* 注销全局 bus 事件监听(重置订阅标志,下次 registerBusListeners 时重新订阅)
*/
unregisterBusListeners() {
const plugin = this.globalData.ppScale.plugin;
if (!plugin) return;
const cbs = this._busCallbacks;
if (cbs.connectState) {
plugin.bus.unsubscribe('connectState', cbs.connectState);
cbs.connectState = null;
}
if (cbs.syncDeviceTimeSuccess) {
plugin.bus.unsubscribe('syncDeviceTimeSuccess', cbs.syncDeviceTimeSuccess);
cbs.syncDeviceTimeSuccess = null;
}
if (cbs.deviceWillDisconnect) {
plugin.bus.unsubscribe('deviceWillDisconnect', cbs.deviceWillDisconnect);
cbs.deviceWillDisconnect = null;
}
this._busSubscribed = false;
},
/**
* 注册全局 bus 事件监听(connectState / syncDeviceTimeSuccess / deviceWillDisconnect
* 调用前先 unsubscribe 旧的,防止多次 onShow 导致回调叠加
* 通过标志位防止多次 onShow 导致回调叠加(SDK bus 不支持 unsubscribe
*/
registerBusListeners() {
this.unregisterBusListeners();
if (this._busSubscribed) return;
this._busSubscribed = true;
const plugin = this.globalData.ppScale.plugin;
// 蓝牙连接状态监听
this._busCallbacks.connectState = (res) => {
plugin.bus.subscribe('connectState', (res) => {
console.log("app.js ===> connectState", res);
this.setGlobalData('ppScale.device.connectState', res);
if (res == plugin.BLUE_STATE.CONNECTSUCCESS) {
@@ -198,22 +181,18 @@ App({
this.reconnectDevice();
}
wx.hideLoading();
};
});
// 同步时间
this._busCallbacks.syncDeviceTimeSuccess = (res) => {
plugin.bus.subscribe('syncDeviceTimeSuccess', (res) => {
console.log("app.js ===> syncDeviceTimeSuccess", res);
};
});
// 设备自动断开监听
this._busCallbacks.deviceWillDisconnect = (res) => {
plugin.bus.subscribe('deviceWillDisconnect', (res) => {
console.log("app.js ===> deviceWillDisconnect", res);
this.setGlobalData('ppScale.device.connectState', plugin.BLUE_STATE.CONNECTFAILED);
};
plugin.bus.subscribe('connectState', this._busCallbacks.connectState);
plugin.bus.subscribe('syncDeviceTimeSuccess', this._busCallbacks.syncDeviceTimeSuccess);
plugin.bus.subscribe('deviceWillDisconnect', this._busCallbacks.deviceWillDisconnect);
});
},
/**