概述
FA模型和Stage模型由于线程模型和进程模型的差异,部分接口仅在FA模型下才能使用,针对这部分接口在SDK的接口中有FAModelOnly的标记,用于提醒开发者这部分接口仅能在FA模型下使用。因此在切换到Stage模型时,需要将应用中用到的FAModelOnly接口替换成Stage模型下对应的接口。下面是startAbility的接口切换示例,全量接口列表请查看后续章节:
startAbility接口由FA模型切换到Stage模型的示例:
- FA模型示例
import featureAbility from '@ohos.ability.featureAbility';
import Want from '@ohos.app.ability.Want';
import Logger from '../../utils/Logger';
const TAG: string = 'PagePageAbilityFirst';
@Entry
@Component
struct Index {
build() {
// ...
Button() {
// ...
}
.onClick(async () => {
try {
Logger.info(TAG, 'Begin to start ability');
let want: Want = {
bundleName: 'com.samples.famodelabilitydevelop',
moduleName: 'entry',
abilityName: 'com.samples.famodelabilitydevelop.PageAbilitySingleton'
};
await featureAbility.startAbility({ want: want });
Logger.info(TAG, `Start ability succeed`);
}
catch (error) {
Logger.error(TAG, 'Start ability failed with ' + error);
}
})
}
}
- Stage示例示例
import Want from '@ohos.app.ability.Want';
import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
@Entry
@Component
struct Index {
private context = getContext(this) as common.UIAbilityContext;
build() {
// ...
Button() {
// ...
}
.onClick(() => {
// context为Ability对象的成员,在非Ability对象内部调用需要
// 将Context对象传递过去
let wantInfo: Want = {
bundleName: "com.example.myapplication",
abilityName: "EntryAbility"
};
this.context.startAbility(wantInfo).then(() => {
console.info('startAbility success.');
}).catch((error: BusinessError) => {
console.error('startAbility failed.');
})
})
}
}
Context接口切换
Context接口切换
FA接口 | Stage模型接口对应d.ts文件 | Stage对应接口或字段 |
---|---|---|
getOrCreateLocalDir(callback:AsyncCallback<string>):void; getOrCreateLocalDir():Promise<string>; |
Stage模型无对应接口 | Stage模型应用在应用根目录下没有操作权限,不提供对应接口 |
verifyPermission(permission:string,options:PermissionOptions,callback:AsyncCallback<number>):void; verifyPermission(permission:string,callback:AsyncCallback<number>):void; verifyPermission(permission:string,options?:PermissionOptions):Promise<number>; |
@ohos.abilityAccessCtrl.d.ts | verifyAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus;: Promise<GrantStatus>; |
requestPermissionsFromUser(permissions:Array<string>,requestCode:number,resultCallback:AsyncCallback<PermissionRequestResult>):void; requestPermissionsFromUser(permissions:Array<string>,requestCode:number):Promise<PermissionRequestResult>; |
@ohos.abilityAccessCtrl.d.ts | requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>, requestCallback: AsyncCallback<PermissionRequestResult>) : void; requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>) : Promise<PermissionRequestResult>; |
getApplicationInfo(callback:AsyncCallback<ApplicationInfo>):void; getApplicationInfo():Promise<ApplicationInfo>; |
application\Context.d.ts | applicationInfo: ApplicationInfo; |
getBundleName(callback : AsyncCallback<string>): void; [getBundleName(): Promise<string>; |
application\UIAbilityContext.d.ts | abilityInfo.bundleName: string; |
getDisplayOrientation(callback : AsyncCallback<bundle.DisplayOrientation>): void; [getDisplayOrientation(): Promise<bundle.DisplayOrientation>; |
@ohos.screen.d.ts | readonly orientation: Orientation; |
setDisplayOrientation(orientation:bundle.DisplayOrientation, callback:AsyncCallback<void>):void; setDisplayOrientation(orientation:bundle.DisplayOrientation):Promise<void>; |
@ohos.screen.d.ts | setOrientation(orientation: Orientation, callback: AsyncCallback<void>): void; setOrientation(orientation: Orientation): Promise<void>; |
setShowOnLockScreen(show:boolean, callback:AsyncCallback<void>):void; setShowOnLockScreen(show:boolean):Promise<void>; |
@ohos.window.d.ts | setShowOnLockScreen(showOnLockScreen: boolean): void; |
setWakeUpScreen(wakeUp:boolean, callback:AsyncCallback<void>):void; setWakeUpScreen(wakeUp:boolean):Promise<void>; |
@ohos.window.d.ts | setWakeUpScreen(wakeUp: boolean): void; |
getProcessInfo(callback:AsyncCallback<ProcessInfo>):void; getProcessInfo():Promise<ProcessInfo>; |
@ohos.app.ability.abilityManager.d.ts | getAbilityRunningInfos(callback: AsyncCallback<Array<AbilityRunningInfo>>): void; getAbilityRunningInfos(): Promise<Array<AbilityRunningInfo>>; |
getElementName(callback:AsyncCallback<ElementName>):void; getElementName():Promise<ElementName>; |
application\UIAbilityContext.d.ts | abilityInfo.name: string; abilityInfo.bundleName: string; |
getProcessName(callback:AsyncCallback<string>):void; getProcessName():Promise<string>; |
@ohos.app.ability.abilityManager.d.ts | getAbilityRunningInfos(callback: AsyncCallback<Array<AbilityRunningInfo>>): void; getAbilityRunningInfos(): Promise<Array<AbilityRunningInfo>>; |
getCallingBundle(callback:AsyncCallback<string>):void; getCallingBundle():Promise<string>; |
Stage模型无对应接口 | Stage模型应用可以使用Want.parameters的ohos.aafwk.param.callerUid参数,获取调用方的应用信息 |
getFilesDir(callback:AsyncCallback<string>):void; getFilesDir():Promise<string>; |
application\Context.d.ts | filesDir: string; |
getCacheDir(callback:AsyncCallback<string>):void; getCacheDir():Promise<string>; |
application\Context.d.ts | cacheDir: string; |
getOrCreateDistributedDir(callback:AsyncCallback<string>):void; getOrCreateDistributedDir():Promise<string>; |
application\Context.d.ts | distributedFilesDir: string; |
getAppType(callback:AsyncCallback<string>):void; getAppType():Promise<string>; |
application\UIAbilityContext.d.ts | 通过abilityInfo字段的type属性获取 abilityInfo.type: bundleManager.AbilityType; |
getHapModuleInfo(callback:AsyncCallback<HapModuleInfo>):void; getHapModuleInfo():Promise<HapModuleInfo>; |
application\UIAbilityContext.d.ts | currentHapModuleInfo: HapModuleInfo; |
getAppVersionInfo(callback:AsyncCallback<AppVersionInfo>):void; getAppVersionInfo():Promise<AppVersionInfo>; |
bundle\bundleInfo.d.ts | readonly name: string; readonly versionCode: number; readonly versionName: string; |
getApplicationContext():Context; | application\Context.d.ts | getApplicationContext(): ApplicationContext; |
getAbilityInfo(callback:AsyncCallback<AbilityInfo>):void; getAbilityInfo():Promise<AbilityInfo>; |
application\UIAbilityContext.d.ts | abilityInfo: AbilityInfo; |
isUpdatingConfigurations(callback:AsyncCallback<boolean>):void; isUpdatingConfigurations():Promise<boolean>; |
Stage模型无对应接口 | 在系统环境变化时,应用不会重启,调用onConfigurationUpdated接口通知应用,该接口在FA模型是空实现接口,Stage模型不提供对应接口 |
printDrawnCompleted(callback:AsyncCallback<void>):void; printDrawnCompleted():Promise<void>; |
Stage模型无对应接口 | 该接口在FA模型是空实现接口,不影响应用功能,Stage模型不提供对应接口 |
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
《鸿蒙开发学习手册》:
如何快速入门:https://qr21.cn/FV7h05
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向