从最新日志分析发现了关键问题:
onAddForm calledonFormEvent called 和用户交互CommonEvent received in form processAvSession data received: isPlaying=trueglobal listener received state update文件: entry/src/main/ets/entryformability/EntryFormAbility.ets
// 在onUpdateForm中添加初始化检查
onUpdateForm(formId: string): void {
if (!this.globalListenerSetup) {
this.initializeServices();
}
// ... 其他逻辑
}
// 在onFormEvent中添加初始化检查
onFormEvent(formId: string, message: string): void {
if (!this.globalListenerSetup) {
this.initializeServices();
}
// ... 其他逻辑
}
文件: entry/src/main/ets/common/widget/PlayerControlService.ets
// 简化AvSession监听器初始化,避免重复注册
private initializeAvSessionListener(): void {
// 不要在这里注册,让EntryFormAbility直接注册到AvSessionWidgetListener
hilog.info(0x0000, TAG, 'AvSession listener initialized successfully (no direct registration needed)');
}
添加更详细的日志来跟踪:
updateAllWidgetsWithData 方法能够被正确调用formProvider.updateForm 能够更新widget UI完整的数据流应该是:
生命周期测试:
数据流测试:
Heanup EntryFormAbility global listener received state updateformProvider.updateForm 调用日志监控:
Heanup EntryFormAbility services not initialized, initializing now...Heanup EntryFormAbility global listener received state updateHeanup widget 1450551168 calling formProvider.updateForm这个修复应该能解决widget无法更新的核心问题,确保EntryFormAbility在任何情况下都能正确初始化并接收状态更新。