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

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


学习目标

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

核心图解

HarmonyOS 流转能力全景图

内容讲解

28.1 原子化服务概述

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

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

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

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

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

特性HarmonyOSAndroidiOS
免安装形态原子化服务Instant App(已废弃)App Clip
桌面卡片Widget(核心入口)AppWidgetWidgetKit
服务中心系统内置不提供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、测试、元服务和应用上架分发等。

更多推荐