Основан на самостоятельно разработанном открытом кадре для быстрого создания различных распределённых бизнес-приложений на основе OpenHarmony SDK и JDK. Этот кадр использует многослойную модель упаковки для обслуживания разработчиков разных уровней, что позволяет упрощать процесс разработки.
Исходя из ограниченной силы одного человека, приветствуем ваши предложения и рекомендации для совместной работы.
Название проекта: Распределённая аппликационная разработка кадр
Серия: Открытый компонент OpenHarmony
Функционал: Упрощение разработки распределённых приложений
Версия SDK: sdk5, DevEco Studio 2.1 Release
Автор проекта: Wu Shengyao
Электронная почта: isrc_hm@iscas.ac.cn
Язык программирования: Java
Исправлены пробелы после пунктов списка и перед названиями файлов.3. В файле build.gradle
уровня модуля добавьте зависимость, добавьте ссылку на JAR-файлы в каталоге libs
внутри тега dependencies
, затем выполните команду gradle sync
.
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
...
}
Если пакет .har
всё ещё не распознан, попробуйте щёлкнуть правой кнопкой мыши по пакету .har
, выбрать "Add as Library" для добавления ссылки на пакет, выберите нужный модуль и нажмите "ОК", чтобы завершить добавление.#### Инструкция по использованию
Распределённая сцена 1: запуск/остановка распределённой задачи
1.1 Уровень контроллеров StartAbilityContainer
Предоставляет высокий уровень упаковки StartAbilityContainer
, который позволяет пользователям просто внедрять экземпляр StartAbilityContainer
в UI для реализации функций обнаружения устройств, запуска и остановки распределённых задач.
Например, можно использовать StartAbilityContainer
как корневое UI, всего несколько строк кода, очень удобно:
// Проверка прав доступа
requestPermissionsFromUser(Permissons.getBasePermissons(), 0);
// Вызов контроллера
StartAbilityContainer startAbilityContainer = new StartAbilityContainer(this);
super.setUIContent(startAbilityContainer);
Примерный результат:
1.2 Уровень функций StartManager
Уровень упаковки ниже, чем у компонента, но более гибкий и свободный, позволяющий пользователям делать выбор самостоятельно.
Управление PA только через запуск/остановку недостаточно для длительного взаимодействия. Поэтому OH-DADF предоставляет удобное распределённое соединение и отправку задач на основе OpenHarmonyOS.
2.1 AbstractProxy
На основе IRemoteBroker
OpenHarmonyOS наша система предлагает класс AbstractProxy
для автоматического управления взаимодействием после соединения. Пользователю достаточно переопределить метод task()
в соответствии с его бизнесом.```java
// 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 {
// Создание данных
MessageParcel data = MessageParcel.obtain();
data.writeInt(a);
data.writeInt(b);
// Установка данных для Proxy
mProxy.setData(data);
// Отправка данных для обработки на удалённой стороне
mProxy.sendRequest();
// Получение ответа от удалённой стороны
int result = mProxy.getReply().readInt();
mProxy.getReply().reclaim();
// Вывод результата
btnControlRemotePA.setText("Результат вычислений = " + result);
};
Предоставлен высокий уровень абстракции ConnectAbilityContainer, который позволяет пользователям использовать экземпляр ConnectAbilityContainer в UI для обнаружения устройств, установки распределённых соединений, отправки данных и разъединения. Пример использования `ConnectAbilityContainer` в качестве корневого UI вместо распределенного сценария:
```java
// Разрешения
requestPermissionsFromUser(Permissions.getBasePermissions(), 0);
// Вызов компонента
ConnectAbilityContainer connectAbilityContainer = new ConnectAbilityContainer(this);
connectAbilityContainer.setIAbilityConnection(mConn);
super.setUIContent(connectAbilityContainer);
Основной эффект представлен ниже:
Сначала нажмите кнопку соединения, после успешного соединения можно будет нажать кнопку выполнения для запуска своего бизнес-логики. После завершения работы нажмите кнопку отключения.
Уровень упаковки функций ниже по сравнению с уровнем компонентов, но более гибкий и свободный, позволяющий пользователям выбирать самостоятельно.
При вводе текста, нажатии кнопки "Сохранить" и последующей кнопки "Миграция", данное приложение будет перемещено на другое устройство (если есть несколько устройств, удовлетворяющих условиям старта, будет показан выборочный диалог), а введённый текст останется неизменным.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )