鸿蒙应用入门级开发者认证实验十(美食菜谱FunctionGraph)

举报
黄生 发表于 2025/12/27 19:23:04 2025/12/27
【摘要】 权限名称表示申请访问互联网的权限,允许应用进行网络通信(如HTTP请求)。"name": "ohos.permission.INTERNET"系统授权(system_grant):安装应用时自动授予,无需用户手动操作(区别于需弹窗的user_grant权限)。此权限为基础权限,无需动态申请调用requestPermissionsFromUser方法。申请原因的文本,需在应用的resource...

权限名称表示申请访问互联网的权限,允许应用进行网络通信(如HTTP请求)。

"name": "ohos.permission.INTERNET"

系统授权(system_grant):安装应用时自动授予,无需用户手动操作(区别于需弹窗的user_grant权限)。此权限为基础权限,无需动态申请调用requestPermissionsFromUser方法。申请原因的文本,需在应用的resources/base/string.json资源文件中定义具体内容(如"reason": "需要网络权限加载食谱数据"),用于安装时向用户展示。

"reason": "$string:reason"

使用场景:abilities:仅限CookAbility组件使用该权限。wheninuse表示仅当应用在前台活跃状态时才启用权限(若为always则代表后台持续可用)。

"usedScene": {
  "abilities": ["CookAbility"],
  "when": "inuse"
}

DevEco Studio 执行预览功能的底层构建指令,调用构建工具链(HVIGOR):

hvigorw.js --mode module ... PreviewBuild --watch --analyze=normal --parallel --incremental --daemon

--watch:实时监听文件变化(保存代码时自动触发增量构建)--incremental:启用增量编译--parallel:并行执行构建任务--daemon:守护进程模式(保持后台运行加速后续构建)需要等待:首次预览需完整编译模块(如entry@default)、解析页面(view/LoginView)、处理资源文件等,耗时较长(比如PreBuild after 325 ms即资源初始化)。与标准 HAP 构建差异在于:跳过签名/优化步骤,生成轻量级 JS Bundle 而非完整 APK,动态注入预览器所需调试接口

在 HarmonyOS 5.0.0+ 中,getContext(component?: Object): Context 签名已被废弃,旧版 getContext() 返回通用 Context 类型,需要开发者手动强制转换(如 as common.UIAbilityContext)。新版 API 直接返回具体上下文类型,消除了强制转换需求。废弃旧签名也是为了统一上下文获取方式:在 UIAbility 中直接使用 this.context 获取 UIAbilityContext,在 UI 组件中使用 getUIContext() 获取 UIContext。新设计更好地支持 Stage 模型,明确区分不同场景的上下文获取方式,避免滥用通用上下文对象。

let context: common.UIAbilityContext= getContext(this) as common.UIAbilityContext
// 修改后的正确写法 (UIAbility 中)
let context: common.UIAbilityContext = this.context; // 直接访问属性

当声明 class CookAbility extends UIAbility 时,表示该组件需要独立窗口和用户界面,会出现在任务管理器中(占用任务槽位),系统会分配完整的界面生命周期管理。Ability 的两种核心类型

类型 特点 适用场景
UIAbility 带独立界面,拥有完整生命周期,在任务视图中显示 用户交互场景(主界面/设置页/播放页)
ServiceExtensionAbility 无界面,纯后台运行,生命周期由系统管理 后台服务(数据同步/定时任务/音乐播放)
let want: Want = {
  bundleName: 'com.example.cookbooks',
  abilityName: 'CookAbility', 
  parameters: { userInfo: this.username }
}

Want 对象本质是跨组件通信的媒介,用于指定目标 Ability(通过 bundleName + abilityName),携带参数(通过 parameters),定义启动模式(如单实例/标准模式)

Want 与 UI 组件的状态管理(如 @State/@Prop/@Link)是不同的通信机制,分别解决跨组件(Ability)通信UI 内部状态同步问题。Want 是 Ability 间通信的载体,类似 Android 的 Intent。用于启动另一个 Ability(显式/隐式)、传递结构化数据(如跳转时携带参数)、实现跨进程通信(不同应用间的 Ability 交互)。单向、一次性的数据传递,不建立持久绑定关系。接收方通过 onCreate()onNewWant() 解析数据。

UI 状态管理用于组件内数据流。状态装饰器用于同一 Ability 内 UI 组件的状态同步@State 组件是私有状态,驱动自身 UI 刷新(如按钮是否禁用)。@Prop 父→子单向传递(只读),子组件不能修改源数据(适合配置参数)。@Link 父子双向绑定,共享同一数据源(如表单输入框与父组件实时同步)。状态装饰器通过 ArkUI 的响应式框架自动触发 UI 更新,而 Want 需手动解析数据。

维度 Want 状态装饰器(@State/@Prop/@Link)
作用范围 跨 Ability(应用级) 同一 Ability 内(UI 组件级)
数据绑定 无绑定,一次性传递 自动响应式绑定
通信方向 单向 单向(@Prop)或双向(@Link)
典型场景 页面跳转、服务调用 表单输入、动态列表更新

避免滥用 Want 传递高频更新数据——它不适合实时状态同步,而适合初始化参数传递Want 是 Ability 间的“信使”,状态变量是 UI 组件的“神经系统”,共同构建鸿蒙的通信体系。

catch((error: BusinessError)=>{}) IDE 提示 Generic type 'BusinessError' requires 1 type argument(s) 的原因是当未通过 import 语句显式导入 BusinessError 时,TypeScript 编译器会将其视为泛型类型,要求指定类型参数(如 BusinessError<number>)。易误导开发者。导入后,BusinessError 会被识别为预定义的接口(非泛型),错误自动消失。

import { BusinessError } from '@kit.BasicServicesKit';
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。