- 30 秒定时冲刷:AnalyticsService.startPeriodicFlush/stopPeriodicFlush, 前台期间 Timer.periodic 周期冲刷;SessionTracker 新增 onEnterForeground 回调,退后台停(并保留既有 flushNow 触发)、回前台恢复,App dispose 收尾。 - 失败退避:网络错误/5xx 后 30s→60s→120s 指数退避封顶 5 分钟,退避窗口 只挡定时冲刷(flushNow/满 20/冷启动显式触发不受限),上传成功即重置; 429 改按网络错误同路径保段重试(Retry-After 分支待后端限流落地)。 - anonymousId 持久化:restore 时从 shared_preferences 采用/落盘 pb.analytics.anonymousId,首次生成后跨冷启动稳定;读取失败降级 进程内临时 id 不崩溃。 - 测试 272 → 286(+14):fakeAsync 定时/退避 8 个、anonymousId 4 个、 429 保段 1 个、前后台回调成对 1 个;analyze 0 问题、format 无 diff。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+9
-1
@@ -58,7 +58,12 @@ class _AppState extends State<App> {
|
||||
SessionManager(store: const SecureTokenStore());
|
||||
|
||||
_sessionTracker = SessionTracker(
|
||||
onLeaveForeground: () => _analytics.flushNow(),
|
||||
onLeaveForeground: () {
|
||||
// 退后台:停定时冲刷并立即冲刷一次(既有触发点保留)。
|
||||
_analytics.stopPeriodicFlush();
|
||||
_analytics.flushNow();
|
||||
},
|
||||
onEnterForeground: () => _analytics.startPeriodicFlush(),
|
||||
);
|
||||
WidgetsBinding.instance.addObserver(_sessionTracker);
|
||||
|
||||
@@ -70,6 +75,8 @@ class _AppState extends State<App> {
|
||||
_initAppVersion();
|
||||
// 冷启动恢复持久化埋点队列并冲刷离线积压(后台任务,不阻塞渲染)。
|
||||
_analytics.restore();
|
||||
// 前台期间 30 秒定时冲刷(13 号 §3.4 第 4 触发点)。
|
||||
_analytics.startPeriodicFlush();
|
||||
|
||||
_pageViewTracker = PageViewTracker(_analytics.trackEvent);
|
||||
_routeObserver = AnalyticsRouteObserver(
|
||||
@@ -161,6 +168,7 @@ class _AppState extends State<App> {
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_analytics.stopPeriodicFlush();
|
||||
sessionManager.removeListener(_reportAuthStateChange);
|
||||
WidgetsBinding.instance.removeObserver(_sessionTracker);
|
||||
appState.dispose();
|
||||
|
||||
Reference in New Issue
Block a user