第28章 HarmonyOs开发图解之 原子化服务

HarmonyOS 学习系统 | 阶段四:专业精通期


学习目标

序号 能力
1 理解原子化服务与传统应用的核心区别
2 掌握服务卡片(Widget)的开发流程
3 能够创建一个完整的原子化服务并配置服务卡片

核心图解

HarmonyOS 流转能力全景图

内容讲解

28.1 原子化服务概述

原子化服务(Atomic Service)是 HarmonyOS 独特的"免安装"应用形态。用户无需在应用市场下载安装,通过扫码、智能推荐或服务中心即可直接使用。服务卡片(Widget)是原子化服务的核心入口,用户可以在桌面上直接看到服务的关键信息。

生活化类比:原子化服务就像"快闪店"

传统应用就像开一家"实体店"——需要租场地(安装)、装修(初始化)、长期经营。原子化服务就像"快闪店"——用户扫个码就能用,不用安装,用完就走。服务卡片就像快闪店的"橱窗"——用户不用进店就能看到里面有什么(天气、待办事项等)。服务中心就像"商场导览屏"——所有快闪店都在这里展示,用户可以按需选择。

28.2 原子化服务 vs 传统应用对比

特性 传统应用 原子化服务
安装方式 用户手动安装 免安装,系统后台安装
入口 桌面图标 服务中心、桌面卡片、智能推荐
体积 通常较大 轻量化,1-2 个功能
跨设备 需各设备分别安装 支持跨设备分享和流转
服务卡片 可选 核心组成部分
创建方式 Project Type: Application Project Type: Service

28.3 服务卡片开发

// WidgetImpl - 服务卡片控制器
public class WidgetImpl extends FormController {

    @Override
    public ProviderFormInfo bindFormData() {
        // 返回卡片显示数据
        ProviderFormInfo formInfo = new ProviderFormInfo();
        // ... 设置卡片数据
        return formInfo;
    }

    @Override
    public void updateFormData(long formId, Object... formObjects) {
        // 更新卡片数据(定时刷新或事件触发)
        HiLog.info(TAG, "更新卡片数据: " + formId);
    }

    @Override
    public void onTriggerFormEvent(long formId, String message) {
        // 响应卡片点击事件
        HiLog.info(TAG, "卡片点击: " + message);
        if ("refresh".equals(message)) {
            updateFormData(formId);
        }
    }

    @Override
    public void onUnbind(long formId) {
        // 卡片被删除
        super.onUnbind(formId);
        HiLog.info(TAG, "卡片被删除: " + formId);
    }
}

28.4 创建流程要点

  1. 创建工程:选择 Project Type 为 Service,勾选 “Show in Service Center”
  2. 设计卡片布局:支持 2x2、2x4、4x4 三种尺寸,包含图标、名称、描述、快照
  3. 实现 WidgetImpl:继承 FormController,实现数据绑定和事件响应
  4. 配置 config.json:label 必须配置且唯一,是服务对用户显示的名称

代码速查卡

API 功能 示例
bindFormData() 绑定卡片初始数据 重写此方法返回 ProviderFormInfo
updateFormData(formId, objects) 更新卡片数据 调用此方法刷新卡片
onTriggerFormEvent(formId, msg) 响应卡片点击 重写此方法处理用户交互
onUnbind(formId) 卡片被删除回调 重写此方法清理资源
Project Type: Service 创建原子化服务 DevEco Studio 新建工程时选择

与 Android/iOS 对比

特性 HarmonyOS Android iOS
免安装形态 原子化服务 Instant App(已废弃) App Clip
桌面卡片 Widget(核心入口) AppWidget WidgetKit
服务中心 系统内置 不提供 App Library
跨设备流转 原生支持 不支持 Handoff(有限)
包大小限制 有严格限制 10MB (Instant App) 10MB (App Clip)

⚠️ 踩坑回忆录

原子化服务有功能限制

原子化服务虽然是"免安装"的,但并不是完全无限制。它有包大小限制、API 使用限制(部分系统 API 不可用)、后台运行时间限制等。我尝试在一个原子化服务中使用后台持续定位,结果被系统很快就杀掉了。正确做法是把定位功能做在配套的完整应用中,原子化服务只做轻量级的前端展示。

另外,服务卡片有尺寸限制,不能把整个 App 的界面都塞进卡片里。2x2 的卡片只能放最核心的信息,4x4 才能放稍微丰富一些的内容。设计卡片时要"少即是多"。


必做实操任务

序号 任务 难度
1 创建一个原子化服务工程,配置服务卡片
2 实现 2x2 尺寸的天气服务卡片
3 实现卡片的定时数据刷新
4 实现卡片点击事件,跳转到详情页
5 将已有应用的部分功能拆分为原子化服务

学习检查清单

  • 能说出原子化服务与传统应用的核心区别
  • 能创建原子化服务工程
  • 能实现服务卡片的 WidgetImpl
  • 知道服务卡片支持的三种尺寸
  • 能实现卡片的点击事件响应
  • 能实现卡片的定时数据刷新
  • 理解原子化服务的功能限制
  • 知道 config.json 中 label 的作用

进阶方向

  • 学习更丰富的卡片布局设计(列表、图片、进度条等)
  • 探索原子化服务与完整应用的数据共享
  • 研究服务卡片的性能优化和更新策略
    片的定时数据刷新
  • 理解原子化服务的功能限制
  • 知道 config.json 中 label 的作用

进阶方向

  • 学习更丰富的卡片布局设计(列表、图片、进度条等)
  • 探索原子化服务与完整应用的数据共享
  • 研究服务卡片的性能优化和更新策略
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐