fix(bugcollect): 平台配置下发后延迟重试 flush,修复事件丢失

- startCrashCapture 后延迟检查 bugCollectApiUrl,就绪后再次 flush
- 添加调试日志帮助排查上传流程
这个提交包含在:
XuqmGroup 2026-06-18 19:29:18 +08:00
父节点 ceaaeca1fe
当前提交 3f03f5c1de

查看文件

@ -5,6 +5,12 @@ import android.content.Context
import android.content.pm.ApplicationInfo import android.content.pm.ApplicationInfo
import android.os.Build import android.os.Build
import com.xuqm.sdk.XuqmSDK import com.xuqm.sdk.XuqmSDK
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.util.LinkedList import java.util.LinkedList
object BugCollect { object BugCollect {
@ -82,10 +88,12 @@ object BugCollect {
) )
if (!isReady()) { if (!isReady()) {
synchronized(pendingErrorsLock) { pendingErrors.add(event) } synchronized(pendingErrorsLock) { pendingErrors.add(event) }
android.util.Log.d("BugCollect", "captureError: SDK not ready, queued (${pendingErrors.size} pending)")
return return
} }
flushPendingErrors() flushPendingErrors()
queue().push(event) queue().push(event)
android.util.Log.d("BugCollect", "captureError: pushed to queue")
} }
fun captureCrash(error: Throwable, tags: Map<String, Any?> = emptyMap()) { fun captureCrash(error: Throwable, tags: Map<String, Any?> = emptyMap()) {
@ -153,6 +161,17 @@ object BugCollect {
) )
flushPendingErrors() flushPendingErrors()
queue().uploadPendingCrashes() queue().uploadPendingCrashes()
// 平台配置可能在初始化之后才下发,延迟重试 flush
GlobalScope.launch(Dispatchers.IO) {
for (i in 1..10) {
delay(2000)
if (!XuqmSDK.bugCollectApiUrl.isNullOrBlank()) {
flushPendingErrors()
queue().uploadPendingCrashes()
break
}
}
}
} }
/** 将 SDK 未就绪时暂存的错误事件 flush 到队列。 */ /** 将 SDK 未就绪时暂存的错误事件 flush 到队列。 */
@ -163,6 +182,7 @@ object BugCollect {
pendingErrors.clear() pendingErrors.clear()
list list
} }
android.util.Log.d("BugCollect", "flushPendingErrors: ${events.size} events")
events.forEach { queue().push(it) } events.forEach { queue().push(it) }
} }