2026瓷砖胶一平米用量多少?齿型抹刀和砖型匹配表
2026/7/3 7:28:43
鸿蒙原子化服务开发实战:构建免安装的轻量应用
✅学习目标
💡重点内容
原子化服务核心特性、DevEco 服务卡片配置、ArkTS 卡片开发、服务生命周期管理
⚠️前置基础
已掌握鸿蒙 ArkTS 开发、应用签名、页面交互、分布式能力等核心技术
鸿蒙原子化服务是一种免安装、跨设备、服务直达的新型应用形态,无需用户下载安装即可使用核心功能,是鸿蒙生态的核心竞争力之一。
| 维度 | 传统应用 | 原子化服务 |
|---|---|---|
| 📦 安装方式 | 需要下载安装到设备 | 免安装,即点即用 |
| 🔌 运行形态 | 独立应用进程 | 以卡片/服务形式嵌入系统环境 |
| 📱 跨设备能力 | 需手动安装到各设备 | 自动适配多设备,无需重复安装 |
| ⏱️ 启动速度 | 冷启动/热启动(>1秒) | 毫秒级启动 |
| 核心特性 | 应用场景 |
|---|---|
| ✅ 服务直达 | 天气查询、快捷支付、日程提醒 |
| 🖼️ 多尺寸卡片 | 桌面小卡片、智慧屏大卡片 |
| 🔄 实时数据同步 | 股票行情、物流跟踪 |
| 🔗 跨设备流转 | 手机→平板→智慧屏服务迁移 |
开发一个「快捷待办」原子化服务,包含:
在entry/config.json中配置原子化服务相关参数:
"module":{"name":"entry","type":"feature","srcPath":"./src/main/ets","description":"快捷待办原子化服务","mainAbility":"MainAbility","deviceTypes":["phone","tablet","tv"],"deliveryWithInstall":false,// 关闭随应用安装"installFree":true,// 开启免安装"abilities":[{"name":"MainAbility","type":"service",// 服务类型"visible":true,"skills":[{"entities":["entity.system.home"],"actions":["action.system.home"]}],"extensionAbilities":[// 配置卡片扩展{"name":"TodoCardExtensionAbility","type":"card","visible":true,"metaData":{"customizeData":[{"name":"ohos.extension.card","value":"config:./resources/base/profile/card_config.json"}]}}]}]}在entry/src/main/resources/base/profile/card_config.json中定义卡片尺寸:
{"card":[{"name":"todo_small","description":"小尺寸待办卡片","type":"1x2",// 1行2列"snapshot":false,"updateEnabled":true,"formVisibleNotify":true,"metaData":{"customizeData":[]}},{"name":"todo_medium","description":"中尺寸待办卡片","type":"2x2",// 2行2列"snapshot":false,"updateEnabled":true,"formVisibleNotify":true,"metaData":{"customizeData":[]}},{"name":"todo_large","description":"大尺寸待办卡片","type":"2x4",// 2行4列"snapshot":false,"updateEnabled":true,"formVisibleNotify":true,"metaData":{"customizeData":[]}}]}// entry/src/main/ets/extensionability/card/TodoSmallCard.ets import formBindingData from '@ohos.app.form.formBindingData'; import formProvider from '@ohos.app.form.formProvider'; @Component export default struct TodoSmallCard { @State todoCount: number = 0; @State completedCount: number = 0; // 卡片初始化 aboutToAppear() { this.loadTodoCount(); } // 加载待办数量 async loadTodoCount() { // 从分布式存储获取数据 const kvUtil = DistributedKVUtil.getInstance(); const todos = await kvUtil.getAllTodoItems(); this.todoCount = todos.length; this.completedCount = todos.filter(item => item.completed).length; } // 点击卡片事件 async onCardClick() { // 打开原子化服务主页面 const context = getContext(this) as common.UIAbilityContext; await context.startAbility({ bundleName: context.bundleName, abilityName: 'TodoEditAbility' }); } build() { Column({ space: 12 }) { Text('快捷待办') .fontSize(16) .fontWeight(FontWeight.Bold); Row({ space: 24 }) { Text(`待办: ${this.todoCount}`) .fontSize(14); Text(`已完成: ${this.completedCount}`) .fontSize(14) .fontColor('#007DFF'); } Button('添加待办') .width('80%') .height(36) .backgroundColor('#007DFF') .fontColor(Color.White) .onClick(() => this.onCardClick()); } .width('100%') .height('100%') .padding(20) .backgroundColor(Color.White); } }// entry/src/main/ets/extensionability/card/TodoMediumCard.ets @Component export default struct TodoMediumCard { @State todoList: TodoItem[] = []; aboutToAppear() { this.loadTodoList(); } async loadTodoList() { const kvUtil = DistributedKVUtil.getInstance(); const todos = await kvUtil.getAllTodoItems(); // 只显示前3条待办 this.todoList = todos.slice(0, 3); } async onTodoClick(item: TodoItem) { // 切换待办状态 const kvUtil = DistributedKVUtil.getInstance(); await kvUtil.updateTodoStatus(item.id, !item.completed); // 更新卡片 this.refreshCard(); } async refreshCard() { // 更新卡片数据 const formData = formBindingData.createFormBindingData({ todoList: this.todoList }); // 获取当前卡片Id const context = getContext(this) as ExtensionContext; const formId = context.formInfo.formId; // 刷新卡片 await formProvider.updateForm(formId, formData); } build() { Column({ space: 16 }) { Text('我的待办') .fontSize(18) .fontWeight(FontWeight.Bold); List({ space: 10 }) { ForEach(this.todoList, item => { ListItem() { Row({ space: 12 }) { Checkbox() .checked(item.completed) .onChange(() => this.onTodoClick(item)); Text(item.content) .fontSize(14) .maxLines(1) .overflow(TextOverflow.Ellipsis) .textDecoration({ type: item.completed ? TextDecorationType.LineThrough : TextDecorationType.None }); } .width('100%') } }, item => item.id); } Button('查看全部') .width('80%') .height(36) .backgroundColor('#007DFF') .fontColor(Color.White) .onClick(() => { const context = getContext(this) as common.UIAbilityContext; context.startAbility({ bundleName: context.bundleName, abilityName: 'TodoListAbility' }); }); } .width('100%') .height('100%') .padding(20) .backgroundColor(Color.White); } }// entry/src/main/ets/extensionability/card/TodoCardExtensionAbility.ts import Base from '@ohos.app.form.formExtensionAbility'; import formBindingData from '@ohos.app.form.formBindingData'; import DistributedKVUtil from '../../../utils/DistributedKV'; export default class TodoCardExtensionAbility extends Base { // 卡片请求更新 onUpdate(formId: string) { // 加载最新数据 DistributedKVUtil.getInstance().getAllTodoItems().then(todos => { // 构建卡片数据 const formData = formBindingData.createFormBindingData({ todoCount: todos.length, completedCount: todos.filter(item => item.completed).length, todoList: todos.slice(0, 3) }); // 更新卡片 this.updateForm(formId, formData); }); } // 卡片删除 onUninstall(formId: string) { console.log('卡片已删除:', formId); } // 卡片点击 onClick(formId: string, message: string) { console.log('卡片点击:', message); } }问题:设备桌面上找不到原子化服务卡片
解决方案:
installFree是否设置为true问题:修改待办后,卡片数据长时间不刷新
解决方案:
updateEnabled是否设置为trueformProvider.updateForm()手动刷新卡片问题:点击卡片无响应
解决方案:
onClick方法是否正确实现context.startAbility()的参数配置正确通过本章学习,我们掌握了:
原子化服务是鸿蒙生态的未来趋势,掌握原子化服务开发将帮助你构建更具竞争力的轻量应用。通过不断实践与创新,你将在鸿蒙生态开发中占据领先地位!