OpenHarmony——FormManager模块源代码分析 原创 精华
作者:成飞
卡片服务简介
服务卡片(以下简称“卡片”)是FA的一种界面展示形式,将FA的重要信息或操作前置到卡片,以达到服务直达,减少体验层级的目的。
基本概念
卡片提供方
服务卡片(以下简称“卡片”)是FA的一种界面展示形式,将FA的重要信息或操作前置到卡片,以达到服务直达,减少体验层级的目的。
卡片提供方是覆写了卡片相关回调函数的FormAbility。
卡片使用方
显示卡片内容的宿主应用,控制卡片在宿主中展示的位置。主要为用户开发的js,hml等前台界面。
卡片管理服务
用于管理系统中所添加卡片的常驻代理服务,包括卡片对象的管理与使用,以及卡片周期性刷新等。
说明:卡片使用方和提供方不要求常驻运行,在需要添加/删除/请求更新卡片时,卡片管理服务会拉起卡片提供方获取卡片信息
运作机制
NAPI接口
Class | API | 描述 |
---|---|---|
formBindingData | createFormBindingData | 创建一个FormBindingData对象。 |
FormExtension(Stage模型用) | onCreate | 卡片提供方接收创建卡片的通知接口。 |
onCastToNormal | 卡片提供方接收临时卡片转常态卡片的通知接口。 | |
onUpdate | 卡片提供方接收更新卡片的通知接口。获取最新数据后调用FormExtensionContext的updateForm接口刷新卡片数据。 | |
onVisibilityChange | 卡片提供方接收修改可见性的通知接口。 | |
onEvent | 卡片提供方接收处理卡片事件的通知接口。 | |
onDestroy | 卡片提供方接收销毁卡片的通知接口。 | |
LifecycleForm(FA模型用) | onCreate | 卡片提供方接收创建卡片的通知接口。 |
onCastToNormal | 卡片提供方接收临时卡片转常态卡片的通知接口。 | |
onUpdate | 卡片提供方接收更新卡片的通知接口。 | |
onVisibilityChange | 卡片提供方接收修改可见性的通知接口。 | |
onEvent | 卡片提供方接收处理卡片事件的通知接口。 | |
onDestroy | 卡片提供方接收销毁卡片的通知接口。 | |
onAcquireFormState | 卡片提供方接收查询卡片状态的通知接口。 | |
FormHost | deleteForm | 删除指定的卡片。调用此方法后,应用程序将无法使用该卡片,卡片管理器服务不再保留有关该卡片的信息。 |
releaseForm | 释放指定的卡片。调用此方法后,应用程序将无法使用该卡片,但卡片管理器服务仍然保留有关该卡片的缓存信息和存储信息。 | |
requestForm | 请求卡片更新。 | |
castTempForm | 将指定的临时卡片转换为普通卡片。 | |
notifyVisibleForms | 向卡片框架发送通知以使指定的卡片可见。该方法调用成功后,会调用onVisibilityChange通知卡片提供方。 | |
notifyInvisibleForms | 向卡片框架发送通知以使指定的卡片不可见。该方法调用成功后,会调用onVisibilityChange通知卡片提供方 | |
enableFormsUpdate | 向卡片框架发送通知以使指定的卡片可以更新。该方法调用成功后,卡片刷新状态设置为使能,卡片可以接收来自卡片提供方的更新。 | |
disableFormsUpdate | 向卡片框架发送通知以使指定的卡片不可以更新。该方法调用成功后,卡片刷新状态设置为去使能,卡片不可以接收来自卡片提供方的更新。 | |
isSystemReady | 检查系统是否准备好。 | |
getAllFormsInfo | 获取设备上所有应用提供的卡片信息。 | |
getFormsInfo | 获取设备上指定应用程序提供的卡片信息。 | |
deleteInvalidForms | 根据列表删除应用程序的无效卡片。 | |
acquireFormState | 获取卡片状态 | |
on(“formUninstall”) | 订阅卡片卸载事件。 | |
off(“formUninstall”) | 取消订阅卡片卸载事件。 | |
notifyFormsVisible | 通知卡片是否可见。 | |
notifyFormsEnableUpdate | 通知卡片是否启用更新状态。 | |
FormProvider | setFormNextRefreshTime | 设置指定卡片的下一次更新时间。 |
updateForm | 更新指定的卡片。 |
接口回调时机如下图
说明:开发者仅需作为卡片提供方进行服务卡片内容的开发,卡片使用方和卡片代理服务由系统自动处理
卡片代理服务类图
关键类:FormMgrService是卡片代理服务的主类。处理来自卡片使用方的请求。
FormProviderMgr是卡片提供方的代理服务。负责连接卡片提供方的FormAbility并进行相关的回调。
FormMgrAdapter及FormTaskMgr负责代理服务进程内的各任务的处理。
总结:卡片使用方通过IFormMgr调用卡片代理服务(FormMgrService)的接口,代理服务进程内,通过FormMgrAdapter及FormTaskMgr处理来各请求任务,并通过卡片提供方的代理服务(FormProviderMgr)拉起卡片提供方的服务。
源码分析(以删除卡片为例)
1. 卡片使用方调用卡片代理服务的DeleteForm接口
foundation\aafwk\standard\services\formmgr\src\form_mgr_service.cpp
foundation\aafwk\standard\services\formmgr\src\form_mgr_adapter.cpp
2. 卡片提供方的代理服务处理删除卡片的通知
foundation\aafwk\standard\services\formmgr\src\form_provider_mgr.cpp
3. 执行FormDeleteConnection连接类的回调。
foundation\aafwk\standard\services\formmgr\src\form_delete_connection.cpp 中的回调
foundation\aafwk\standard\services\formmgr\src\form_task_mgr.cpp中的 PostDeleteTask
foundation\aafwk\standard\services\formmgr\src\form_task_mgr.cpp的NotifyFormDelete任务
foundation\aafwk\standard\services\formmgr\src\fomr_mgr_adapter.cpp的NotifyFormDelete函数
4. 卡片提供方删除卡片(Stage模型的情况)
foundation\aafwk\standard\frameworks\kits\ability\native\src\form_runtime\form_extension_provider_client.cpp
NotifyFormExtensionDelete任务
用户编写的FormAbility的onDestory被调用。
4. 卡片提供方删除卡片(FA模型的情况)
foundation\aafwk\standard\frameworks\kits\ability\native\src\form_provider_client.cpp
由ace层调用用户的onDestroy方法。
foundation\ace\ace_engine\adapter\ohos\entrance\ace_form_ability.cpp
…
foundaton\ace\ace_engine\adapter\ohos\entrance\pa_engine\jsi\jsi_pa_engine.cpp
用户的OnDestory方法被调用。
命令工具(fm)
fm help
命令 | 描述 |
---|---|
fm help | 显示fm命令帮助信息 |
fm query
命令 | 描述 |
---|---|
fm query -s | 查询form 信息 |
fm query -n <bundle-name> | 根据bundle name查询form信息 |
fm query -i <form-id> | 根据form id查询form信息 |
处理fm query命令的接口及出力内容格式
命令 | FormMgrService | 出力内容的格式(参考FormDumpMgr类) |
---|---|---|
fm query -s | DumpStorageFormInfos | DumpStorageFormInfos |
fm query -n <bundle-name> | DumpFormInfoByBundleName | DumpFormInfos |
fm query -i <form-id> | DumpFormInfoByFormId | DumpFormInfo + DumpFormHostInfo |
fm query -s 源码解析
foundation\aafwk\standard\tools\fm\src\fms_command.cpp的QueryStorageFormInfo函数
foundation\aafwk\standard\interfaces\innerkits\form_manager\src\form_mgr_stub.cpp消息与函数映射
foundation\aafwk\standard\interfaces\innerkits\form_manager\src\form_mgr_stub.cpp
foundation\aafwk\standard\services\formmgr\src\form_mgr_service.cpp的DumpStorageFormInfos
foundation\aafwk\standard\services\formmgr\src\form_mgr_adapter.cpp的DumpStorageFormInfos
foundation\aafwk\standard\services\formmgr\src\form_dump_mgr.cpp的DumpStorageFormInfos
更多原创内容请关注:深开鸿技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
好久不见卡片的讲解了,感谢大佬分享。