修正流量不统计等问题
(cherry picked from commit 9f94be27288b5cf8f23236706fa2e561abf967e2)
This commit is contained in:
parent
064a0a7402
commit
d94e7fd44a
@ -1044,18 +1044,33 @@ class KRSingBoxImp {
|
||||
throw err;
|
||||
}).run();
|
||||
|
||||
// ⚠️ 借鉴 Hiddify 架构:不在 start() 时立即订阅 command client
|
||||
// ⚠️ 关键修复:在启动成功后立即订阅统计流
|
||||
// 原因:
|
||||
// 1. 避免阻塞 UI 线程 - startCommandClient() 是同步 FFI 调用
|
||||
// 2. watchStats/watchGroups 是懒加载的,首次调用时自动初始化
|
||||
// 3. 如果 command.sock 未就绪,会在后台自动抛出异常,不影响启动流程
|
||||
// 1. 统计流需要主动订阅才能接收数据
|
||||
// 2. UI 只是读取 kr_stats.value,不会触发订阅
|
||||
// 3. command.sock 在 start() 成功后会立即创建
|
||||
|
||||
KRLogUtil.kr_i('✅ SingBox 核心已启动,command client 将延迟初始化', tag: 'SingBox');
|
||||
KRLogUtil.kr_i('💡 watchStats/watchGroups 会在首次调用时自动连接', tag: 'SingBox');
|
||||
KRLogUtil.kr_i('✅ SingBox 核心已启动,开始初始化 command client', tag: 'SingBox');
|
||||
|
||||
// ⚠️ 完全不主动订阅,避免阻塞 UI 线程
|
||||
// 借鉴 Hiddify:所有订阅由 UI 被动触发(懒加载)
|
||||
KRLogUtil.kr_i('⚠️ 不再主动订阅 command client,完全由 UI 触发', tag: 'SingBox');
|
||||
// 🔑 在后台延迟订阅统计流,避免阻塞 UI
|
||||
Future.delayed(const Duration(milliseconds: 1000), () async {
|
||||
try {
|
||||
KRLogUtil.kr_i('📊 开始订阅统计数据流...', tag: 'SingBox');
|
||||
_kr_subscribeToStats();
|
||||
KRLogUtil.kr_i('✅ 统计数据流订阅成功', tag: 'SingBox');
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_w('⚠️ 统计数据流订阅失败(稍后重试): $e', tag: 'SingBox');
|
||||
// 如果第一次失败,再等待一段时间重试
|
||||
Future.delayed(const Duration(milliseconds: 2000), () {
|
||||
try {
|
||||
_kr_subscribeToStats();
|
||||
KRLogUtil.kr_i('✅ 统计数据流重试订阅成功', tag: 'SingBox');
|
||||
} catch (e2) {
|
||||
KRLogUtil.kr_e('❌ 统计数据流重试订阅失败: $e2', tag: 'SingBox');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
} catch (e, stackTrace) {
|
||||
KRLogUtil.kr_e('💥 SingBox 启动异常: $e', tag: 'SingBox');
|
||||
KRLogUtil.kr_e('📚 错误堆栈: $stackTrace', tag: 'SingBox');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user