方法功能分析
-
checkUpdate()
- 主要功能:检查应用更新
- 特点:
- 使用 _isUpdateDialogShowing 标志防止重复弹窗
- 检查更新前清除定时器
- 调用 UpdateService.checkUpdate() 执行实际更新检查
- 完成后会重置标志并启动定时器
-
_startUpdateTimer()
- 主要功能:启动一个每5分钟检查一次的定时器
- 特点:
- 定时检查更新条件:
- 应用没有处于暂停状态
- 没有新更新待处理
- 如果不满足条件则清除定时器
- 如果不在首页但有新更新,设置 _hasNewUpdate 标志
- 定时检查更新条件:
-
_endUpdateTimer()
- 主要功能:取消现有的定时器
调用关系
-
初始调用链:
- onReady() → checkUpdate() → 完成后调用 _startUpdateTimer()
-
定时检查逻辑:
- _startUpdateTimer() 设置的定时器每分钟检查:
- 如果在首页 → 直接调用 checkUpdate()
- 如果不在首页 → 只检查是否有更新但不弹窗,设置 _hasNewUpdate 标志
- _startUpdateTimer() 设置的定时器每分钟检查:
-
生命周期影响:
- 应用回到前台( didChangeAppLifecycleState ) → 调用 checkUpdate()
- 应用暂停 → 定时器会跳过检查
调用时机总结
| 场景 | 调用的方法 |
|---|---|
| 控制器初始化完成 | checkUpdate() → _startUpdateTimer() |
| 每分钟定时检查 | 根据条件可能调用checkUpdate()或只设置标志 |
| 应用从后台回到前台 | checkUpdate() |
| 需要停止定时检查 | _endUpdateTimer() |
| 路由变化到首页且有新更新 | checkUpdate() |
设计意图分析
-
防重复弹窗:通过 _isUpdateDialogShowing 确保不会同时显示多个更新弹窗
-
智能检查:
- 在首页时直接显示更新
- 不在首页时只记录有更新,等回到首页再显示
-
性能考虑:
- 应用暂停时停止检查
- 使用定时器避免频繁检查
-
用户体验:
- 不会在用户使用其他页面时突然弹出更新提示
- 回到首页或定时检查时才会提示
这种设计实现了:
- 定期检查更新
- 合理的更新提示时机
- 避免不必要的网络请求和用户打扰
- 正确处理应用生命周期变化
流程图
---
config:
theme: base
look: handDrawn
layout: dagre
---
flowchart TD
A[RootController初始化] --> B[onReady]
B --> C[调用checkUpdate]
subgraph checkUpdate方法
C --> D{_isUpdateDialogShowing?}
D -->|否| E[设置为true]
E --> E1[调用_endUpdateTimer]
E1 --> F[执行UpdateService.checkUpdate]
F --> G[重置标志为false]
G --> H[设置_hasNewUpdate=false]
H --> I[调用_startUpdateTimer]
D -->|是| Z[直接返回]
end
subgraph _startUpdateTimer方法
I --> J[创建每分钟触发的定时器]
J --> K{定时器触发条件检查}
K -->|应用暂停或已有更新| L[跳过本次检查]
K -->|在首页| M[调用checkUpdate]
K -->|不在首页| N[检查是否有新更新]
N --> O{有更新?}
O -->|是| P[设置_hasNewUpdate=true]
O -->|否| Q[不做操作]
end
subgraph 其他触发路径
R[应用回到前台] --> C
S[路由变化到首页且有新更新] --> C
T[控制器关闭]
end
subgraph _endUpdateTimer方法
E1 --> V[取消现有定时器]
L --> V
T --> V
end