v83: 后台定期同步(四层调度,策略照 SyncCalendar)
用户原话:「另外,要有定期同步的功能,就是家书app在后台,也能自动同步
数据,这样打开app,基本上数据就是最新的。同步的策略,去synccalendar找,
里面有办法。」
四层调度(缺一层就会在某种场景下"永远不同步"):
1. 前台:onForeground 时若距上次同步超过 5 分钟,补一次
2. 退后台:requestSuspendDelay 短时任务(单次≤3分钟、单日10分钟配额)
3. 延迟任务:workScheduler(周期 2 小时 —— 系统按活跃分组压制,
请求更短不报错但不生效)
4. 桌面卡片:updateDuration:1(=30 分钟,唯一不受压制的通道,
每天上限 50 次);先推卡片再触发同步
关键约束(写错了都不报错,只是静默失效):
- WorkSchedulerExtensionAbility 单次回调上限 2 分钟,必须在 finally 里 stopWork
- 后台扩展跑在独立进程,EntryAbility.onCreate 的初始化一步都没跑过
⇒ prepare() 必须补齐 token store / module token / FbDb.open
- 回前台必须 cancelSuspendDelay 归还配额,否则两三天后用光
- workInfo 要带 isPersisted,否则重启后任务永久消失
- abilityName 必须与 module.json5 声明一致,对不上时 startWork 不报错但不回调
- ApplicationInfo 没有 bundleName 字段,包名在 .name
其他:
- 卡片驱动的同步有节流(CARD_MIN_GAP_MS 25 分钟 < 卡片刷新 30 分钟,
反了就是每次刷新都被跳过、一次都不跑)
- 设置页新增「同步」分组:开关 + 上次同步时间 + 说明
同时修:首页日程红线左侧缺一块(nowLayer 从 Row{圆点;线} 改成单个
Column 满宽 —— Row 里圆点占行首,线只能从第 5vp 起画)
守卫 1106/0、v83 反向验证 10/10 全中、已装机。
This commit is contained in:
@@ -104,6 +104,19 @@
|
||||
"resource": "$profile:form_config"
|
||||
}
|
||||
]
|
||||
},
|
||||
// 🔴 v83(用户 2026-10-23「要有定期同步的功能,家书app在后台也能自动同步」):
|
||||
// 延迟任务扩展。由 `common/FbBackgroundSync.ets` 用 `workScheduler.startWork`
|
||||
// 注册(周期 2 小时、`isPersisted` 重启自动恢复)。
|
||||
// ⚠️ `name` 必须与 `FbBackgroundSync.ets` 里的 `WORK_ABILITY` **逐字相同**,
|
||||
// 否则 `startWork` 不报错、但**永远不会有回调**(系统找不到这个扩展)。
|
||||
// ⚠️ `type` 必须是 `workScheduler`;`exported: false` —— 它只由系统拉起,
|
||||
// 不需要(也不应该)被别的应用调起。
|
||||
{
|
||||
"name": "FbSyncWorkAbility",
|
||||
"srcEntry": "./ets/syncwork/FbSyncWorkAbility.ets",
|
||||
"type": "workScheduler",
|
||||
"exported": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user