基于OpenHarmonyOS自主研发一个开源的跨设备应用开发框架,实现多种分布式业务的快速开发。本框架基于OpenHarmony SDK和JDK实现,采用多层封装的模式服务不同水平的开发者,达到简化开发的目标。
由于个人的力量是有限的,欢迎大家提出意见和建议,共同开发。
项目名称:分布式应用开发框架
所属系列:OpenHarmony第三方组件
功能:简化分布式应用开发
开发版本:sdk5,DevEco Studio2.1 Release
项目发起作者:吴圣垚
编程语言:Java
下载OH-DADF的har包OH-DADF.har
启动 DevEco Studio,将下载的har包,导入工程目录“entry->libs”下。
在moudle级别下的build.gradle文件中添加依赖,在dependences标签中增加对libs目录下jar包的引用,然后执行gradle sync。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
……
}
1.1 控件层封装StartAbilityContainer
提供了高度封装的StartAbilityContainer,使用者只需在其UI中植入StartAbilityContainer实例即可实现设备发现、分布式任务启动、停止等功能。
例如,直接将StartAbilityContainer作为根UI,短短几行,十分方便:
//权限
requestPermissionsFromUser(Permissons.getBasePermissons(),0);
//调用控件
StartAbilityContainer startAbilityContainer = new StartAbilityContainer(this);
super.setUIContent(startAbilityContainer);
大致效果如下:
1.2 函数层封装StartManager
相比Component级封装程度较低,但更灵活自由,使用者可以自由选择。
2.分布式场景二:分布式任务连接/发送
仅通过启动/停止两种方式对PA进行调度无法应对需长期交互的场景,因此,OH-DADF基于OpenHamonyOS提供了便捷的分布式任务连接及发送的能力。
2.1 AbstractProxy
基于OpenHarmonyOS的IRemoteBroker,本框架提供AbstractProxy类自动化管理连接后的交互,使用者只需根据自身业务重写task()方法即可。
// IAbilityConnection是OpenHarmonyOS自带的类,使用它的回调函数来管理连接关系
private IAbilityConnection mConn = new IAbilityConnection() {
@Override
public void onAbilityConnectDone(ElementName element, IRemoteObject remote, int resultCode) {
// 跨设备PA连接完成后,会触发本回调
MessageOption option = new MessageOption(MessageOption.TF_SYNC);
// 创建AbstractProxy实例
mProxy = new AbstractProxy(remote,option) {
@Override
public void task() throws RemoteException {
//写自己的业务逻辑即可,例如这里想要执行一个1+1的加法运算
mytask(1,1);
}
};
Log.info("PA","连接远程PA已完成");
}
@Override
public void onAbilityDisconnectDone(ElementName element, int resultCode) {
// 当已连接的远端PA关闭时,会触发本回调
Log.info("PA","断开远程PA已完成");
}
};
private void mytask(int a, int b) throws RemoteException {
//创建data
MessageParcel data = MessageParcel.obtain();
data.writeInt(a);
data.writeInt(b);
//将data设置给Proxy
mProxy.setData(data);
//将data发送给远端处理
mProxy.sendRequest();
//获取远端返回的结果
int result = mProxy.getReply().readInt();
mProxy.getReply().reclaim();
//打印结果
btnControlRemotePA.setText("计算结果 = " + result);
};
2.2 控件层封装ConnectAbilityContainer
提供了高度封装的ConnectAbilityContainer,使用者只需在其UI中植入ConnectAbilityContainer实例 即可实设备发现、分布式任务连接、发送、断开等功能。
例如,直接将ConnectAbilityContainer作为根UI,相比分布式场景一,仅多了一行代码用于将IAbilityConnection实例传给ConnectAbilityContainer:
//权限
requestPermissionsFromUser(Permissons.getBasePermissons(),0);
//调用控件
ConnectAbilityContainer connectAbilityContainer = new ConnectAbilityContainer(this);
connectAbilityContainer.setIAbilityConnection(mConn);
super.setUIContent(connectAbilityContainer);
大致效果如下:
首先点击连接,成功后就可以点击执行按钮来开始执行自己的业务逻辑了,完成后点击断开。
2.3 函数层封装ConnectManager
相比Component级封装程度较低,但更灵活自由,使用者可以自由选择。
3.分布式场景三:分布式应用程序迁移
分布式应用程序迁移部分与OpenHarmonyOS提供的能力相差不大,都是使用AbilitySlice继承IAbilityContinuation来完成的,感兴趣可以参考官方文档。后续打算推出基于AbilitySlice的各种业务模板,简化开发。
这边提供了一个简单的分布式记事本demo,大致效果如下:
当输入一些文字后,点击保存然后点击迁移,这个应用会在迁移到另一个设备上(如果有多个设备满足启动条件,会弹出选择框),输入的文字信息保持不变。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。