
回复
作为一个曾在组件通信中迷路的开发者,今天要揭秘HarmonyOS的Want!第一次用Want传数据时,同事以为我会「隔空传物」,其实只是掌握了这个组件通信的核心神器~
想象两个舞台演员要传道具:
属性 | 作用 | 快递类比 |
---|---|---|
deviceId | 目标设备ID | 省市区地址 |
bundleName | 应用包名 | 快递公司名称 |
abilityName | 组件名称 | 具体收件人姓名 |
parameters | 传递参数 | 快递包裹内容 |
uri | 资源地址 | 快递物品链接 |
知道具体组件名时用显式Want,像知道收件人姓名地址:
import { common, Want } from '@ohos.app.ability';
// 打包快递单(显式Want)
const want: Want = {
bundleName: 'com.example.myapp', // 应用包名
abilityName: 'SettingsAbility', // 目标组件名
parameters: {
fromHome: true, // 传参:从首页来
themeColor: 'blue' // 传参:主题色
}
};
// 发快递(启动组件)
common.startAbility(want).then(() => {
console.log('设置页启动成功');
}).catch((err) => {
console.error('启动失败:', err);
});
不知道具体组件名,按功能找,像快递写「财务部收」:
import { common, Want } from '@ohos.app.ability';
// 模糊快递单(隐式Want)
const want: Want = {
action: 'ohos.want.action.VIEW', // 动作:查看
uri: 'https://harmonyos.com', // 网址
type: 'text/html', // 类型:HTML
entities: ['entity.system.browsable'] // 实体:可浏览
};
// 发快递(启动浏览器)
common.startAbility(want).then(() => {
console.log('浏览器启动成功');
}).catch((err) => {
console.error('启动失败:', err);
});
import { common, Want } from '@ohos.app.ability';
// 跨省快递单(跨设备Want)
const want: Want = {
deviceId: '123456789', // 目标设备ID
bundleName: 'com.example.remoteapp',
abilityName: 'RemoteAbility',
parameters: {
fileData: '重要数据' // 跨设备传数据
}
};
// 发跨省快递(跨设备启动)
common.startAbility(want).then(() => {
console.log('远程设备组件启动成功');
}).catch((err) => {
console.error('跨设备启动失败:', err);
});
const want: Want = {
parameters: {
userId: 123, // 数字
isVIP: true, // 布尔
userName: 'HarmonyUser', // 字符串
userTags: ['dev', 'designer'] // 数组
}
};
// 定义用户对象
interface User {
id: number;
name: string;
age: number;
}
const user: User = { id: 1, name: '张三', age: 25 };
const want: Want = {
parameters: {
userData: JSON.stringify(user) // 序列化对象
}
};
// 接收方解析
const receivedData = JSON.parse(want.parameters.userData);
优化项 | 做法 | 效果 |
---|---|---|
数据压缩 | 传数据前压缩,像压缩包裹 | 传输速度+30% |
异步处理 | 跨设备调用放异步,像发挂号信 | 不阻塞主线程 |
断网重连 | 失败后3次重连,像快递丢件重发 | 成功率+90% |
对比项 | Want | Android Intent |
---|---|---|
跨设备支持 | 原生支持 | 需额外框架 |
参数类型 | 支持更多类型 | 部分类型需序列化 |
匹配规则 | 更灵活 | 较固定 |
安全性 | 支持沙箱隔离 | 需手动处理 |
第一次用Want跨设备传数据时,以为要写复杂协议~ 其实HarmonyOS封装得很简单,像填快递单一样轻松~ 现在做分布式应用,跨设备传参就像本地传一样顺滑~