FA模型
介绍
Ability框架在API 8及更早版本使用FA模型。FA模型中Ability分为PageAbility、ServiceAbility、DataAbility、FormAbility几种类型。其中:
- PageAbility是具备ArkUI实现的Ability,是用户具体可见并可以交互的Ability实例。
- ServiceAbility也是Ability一种,但是没有UI,提供其他Ability调用自定义的服务,在后台运行。
- DataAbility也是没有UI的Ability,提供其他Ability进行数据的增删查服务,在后台运行。
- FormAbility是卡片Ability,是一种界面展示形式。
本示例主要展示FA模型与Stage模型的区别,分别从DataAbility、PageAbility(工程中对应MainAbility)、ServiceAbility、FA卡片、featureAbility、particleAbility、context模块进行介绍。
DataAbility:接口createRdbPredicates;通过createRdbPredicates创建DataAbilityHelper对象;通过rdb创建数据库,用来存放数据;通过DataAbilityHelper来访问数据库;通过dataAbility对数据库进行增删改查操作。
ServiceAbility:生命周期函数onStart、onCommand、onConnect、onDisconnect、onStop;通过featureAbility中的startAbility启动Service;通过connectAbility连接service;通过disconnectAbility断开service连接;通过rpc进行客户端与服务端通信。
FormAbility:生命周期函数onCreate、onCastToNormal、onUpdate、onVisibilityChange、onEvent、onDestroy、onAcquireFormState;通过formBindingData中的createFormBindingData创建卡片。
featureAbility: 提供UI设计与用户交互的能力 , 包括启动新的ability、获取dataAbilityHelper、设置此Page Ability、获取当前Ability对应的窗口,连接服务等 。
particleAbility: 提供Service类型Ability的能力,包括启动、停止指定的particleAbility,获取dataAbilityHelper,连接、断开当前Ability与指定ServiceAbility等 。
context: 提供ability或application的上下文的能力,包括允许访问特定于应用程序的资源、请求和验证权限等。
PageAbility:应用的界面绘制。
FA和Stage模型的区别
1.在FA模型中主要配置文件config.json,需要时将对应的ability配置在config.json中module/abilites;对应Stage模型中主要有module.json5,需要时对应的ServiceExtAbility等须配置在module.json5中的extensionAbilities中,Page页面的Ability在abilites中。
2.Stage模型中卡片的创建需要的配置文件在resources/base/profile/form_config.json。
3.FA模型中ability生命周期与Stage模型生命周期区别:
FA模型生命周期具体参考文档 ;Stage模型生命周期具体参考文档 。
4.FA模型中dataAbility对应Stage模型中DataShareExtensionAbility,具体实现差异详见方法注释。
5.FA模型中ServiceAbility对应Stage模型中ServiceExtensionAbility,具体实现差异详见方法注释。
6.FA模型中DataAbilityHelper对应stage模型DataShareHelper。
7.FA模型通过导入@ohos.resourceManager, 获取应用资源信息 ;Stage模型从API Version9开始,通过context获取resourceManager对象的方式,再调用其内部获取资源的接口, 无需再导入 @ohos.resourceManager。
FA对应Stage接口(FA-->Stage)
FeatureAbility——>AbilityContext、dataShare接口:
FeatureAbilityHelper:getWant——>MainAbility:want
FeatureAbilityHelper:startAbilityForResult——>AbilityContextController:startAbilityForResult
FeatureAbilityHelper:acquireDataAbilityHelper——>DataShareHelper:createDataShareHelper
FeatureAbilityHelper:terminateSelfWithResult——>AbilityContextController:terminateSelfWithResult
FeatureAbilityHelper:hasWindowFocus——>Stage模型不支持
FeatureAbilityHelper:terminateSelf——>AbilityContextController:terminateSelf
FeatureAbilityHelper:getWindow——>WindowController:getTopWindow
FeatureAbilityHelper:startServiceAbility——>AbilityContextController:startAbility
FeatureAbilityHelper:connectService——>AbilityContextController:connectAbility
FeatureAbilityHelper:disconnectService——>AbilityContextController:disconnectAbility
context-->AbilityContext、Bundle、Window、abilityAccessCtrl接口:
AppContext:getOrCreateLocalDir——>BundleController:entryDir
AppContext:verifyPermission——>AbilityAccessCtrlController:verifyAccessToken
AppContext:requestPermissionsFromUser——>AbilityContextController:requestPermissionsFromUser
AppContext:getApplicationInfo——>BundleController:getApplicationInfo
AppContext:getBundleName——>AbilityContextPage:abilityInfo.bundleName(属性)
AppContext:getDisplayOrientation——>AbilityContextPage:config.direction(属性)
AppContext:setDisplayOrientation——>WindowController:setPreferredOrientation
AppContext:setShowOnLockScreen——>MainAbility:setShowOnLockScreen
AppContext:setWakeUpScreen——>WindowController:setWakeUpScreen
AppContext:getProcessInfo——>AbilityContextPage:abilityInfo.descriptionId;abilityInfo.name(属性)
AppContext:getElementName——>BundleController:getAbilityInfo
AppContext:getProcessName——>BundleController:process
AppContext:getCallingBundle——>want.parameters(属性)
AppContext:getCacheDir——>AbilityContextPage:cacheDir(属性)
AppContext:getFilesDir——>AbilityContextPage:filesDir(属性)
AppContext:getOrCreateDistributedDir——>AbilityContextPage:distributedFilesDir(属性)
AppContext:getAppType——>BundleController:entityType
AppContext:getHapModuleInfo——>AbilityContextPage:currentHapModuleInfo(属性)
AppContext:getAppVersionInfo——>BundleController.getDispatcherVersion
AppContext:getAbilityInfo——>AbilityContextPage:abilityInfo(属性)
AppContext:getApplicationContext——>AbilityContextPage:getApplicationContext()
AppContext:isUpdatingConfigurations——>Stage模型不支持
AppContext:printDrawnCompleted——>Stage模型不支持
ParticleAbility ——>ServiceExtensionContext、dataShare接口:
ParticleAbilityHelper :startAbility——>ServiceExtContextController:startAbility
ParticleAbilityHelper :connectAbility——>ServiceExtContextController:connectAbility
ParticleAbilityHelper :disconnectAbility——>ServiceExtContextController:disconnectAbility
ParticleAbilityHelper:terminateSelf——>ServiceExtContextController:terminateSelf
ParticleAbilityHelper :acquireDataAbilityHelper——>DataShareHelper:createDataShareHelper
使用说明
1.按照各按钮名称测试相应的接口功能。
效果预览

相关权限
不涉及。
依赖
FaModel升级StageModel,对应的StageModel参考StageModel。
约束与限制
1.本示例仅支持在标准系统上运行,支持设备:RK3568。
2.本示例仅支持API9版本SDK,版本号:3.2.10.6 及以上。
3.本示例需要使用DevEco Studio 3.1 Canary1 (Build Version: 3.1.0.100)及以上才可编译运行。