この記事では、Hongmeng分散スケジューリングを素早く理解し、データベース関連のアプリケーションを開発する方法を説明します。

この記事では、Hongmeng分散スケジューリングを素早く理解し、データベース関連のアプリケーションを開発する方法を説明します。

[[389002]]

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ

https://harmonyos..com

1. はじめに

開発者は、分散スケジューリング機能をアプリケーションに統合し、指定された機能の分散インターフェイスを呼び出すことによって、デバイス間の機能スケジューリングを実装します。分散タスク スケジューリングでは、アビリティ テンプレートとインテントに応じて、リモート FA の開始 (Feature Ability)、リモート PA の開始 (Particle Ability)、リモート PA のシャットダウン、リモート PA の接続、リモート PA の切断、および FA のデバイス間移行という 6 つの機能が開発者に提供されます。分散タスク スケジューリングの詳細については、「分散タスク スケジューリング」を参照してください。

🕮 説明

FA をリモートで起動するには、少なくとも 2 つのデバイスが同じ分散ネットワーク内にある必要があります。これは次の操作によって実現できます。

1. すべてのデバイスが同じネットワークに接続されています。

2. すべてのデバイスで同じ Huawei アカウントにログインします。

3. すべてのデバイスで、「設定 -> その他の接続 -> 複数デバイスのコラボレーション」をオンにします。

このチュートリアルでは、「分散スケジューリングに基づく FA のリモート起動」を例に、許可申請、ボタンイベント応答、デバイスリストの取得、FA のリモート起動の開発プロセスを組み合わせ、分散スケジューリング機能をすぐに理解できるようにします。

2. 必要な許可を申請する

entry\src\main\config.json で次の 4 つの権限を申請します。

1. ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE: 分散ネットワーク内のデバイス状態の変化を監視できるようにするために使用されます。

2. ohos.permission.GET_DISTRIBUTED_DEVICE_INFO: 分散ネットワーク内のデバイス リストとデバイス情報を取得するために使用されます。

3. ohos.permission.GET_BUNDLE_INFO: 他のアプリケーションの情報を照会するために使用されます。

4. ohos.permission.DISTRIBUTED_DATASYNC: 異なるデバイス間でのデータ交換を許可するために使用されます。

サンプルコードは次のとおりです。

  1. モジュール": {
  2. ......
  3. 「必要な権限」 : [
  4. {
  5. 「名前」 : 「ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE」   
  6. },
  7. {
  8. 「名前」 : 「ohos.permission.GET_DISTRIBUTED_DEVICE_INFO」   
  9. },
  10. {
  11. 「名前」 : 「ohos.permission.GET_BUNDLE_INFO」   
  12. },
  13. {
  14. 「名前」 : 「ohos.permission.DISTRIBUTED_DATASYNC」   
  15. }
  16. ]
  17. }

さらに、アビリティを実装するコードで、マルチデバイスの共同アクセスを使用する権限を明示的に宣言する必要もあります。サンプルコードは次のとおりです。

  1. パブリッククラスMainAbilityはAbilityを拡張します{
  2. @オーバーライド
  3. パブリックvoid onStart(インテント インテント) {
  4. requestPermissionsFromUser(新しい文字列[]{ "ohos.permission.DISTRIBUTED_DATASYNC" },0);
  5. super.onStart(インテント);
  6. }
  7. }

3. クリックイベントに応答するボタンを実装する

MainAbilitySlice.java でページを開発し、そのページにボタンを描画します。サンプルコードは次のとおりです。

  1. @オーバーライド
  2. パブリックvoid onStart(インテント インテント) {
  3. super.onStart(インテント);
  4. DirectionalLayout レイアウト = 新しい DirectionalLayout(this);
  5. ComponentContainer.LayoutConfig config = 新しいComponentContainer.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_PARENT,
  6. ComponentContainer.LayoutConfig.MATCH_PARENT);
  7. レイアウトを設定します。
  8. ボタン btn = new Button(getContext());
  9. ShapeElement buttonBg = 新しい ShapeElement();
  10. ボタンの背景色をRgbColorに設定します(新しいRgbColor(0, 125, 255));
  11. ボタンの背景のコーナー半径を設定します(25);
  12. btn.setBackground(ボタンの背景);
  13. ComponentContainer.LayoutConfig btnConfig = 新しいComponentContainer.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_PARENT,
  14. ComponentContainer.LayoutConfig.MATCH_CONTENT);
  15. btn.setLayoutConfig(btnConfig);
  16. btn.setTextSize(50);
  17. btn.setPadding(10, 10, 10, 10);
  18. btn.setText( "リモートFAを開始" );
  19. レイアウトにコンポーネントを追加します(btn);
  20. btn.setClickedListener(コンポーネント -> {
  21. // ボタンの応答を処理します。詳細については、手順 3「デバイス リストを取得する」を参照してください。
  22. });
  23. super.setUIContent(レイアウト);
  24. }

4. デバイスリストを取得する

リモートスタートFAボタンの応答で、デバイスリストが取得されます。 DeviceManager.getDeviceList(int flag) はデバイス リストを取得するために使用されます。このフラグは DeviceInfo.FLAG_GET_ONLINE_DEVICE に渡され、分散ネットワーク内のすべてのオンライン デバイスを照会します。返された DeviceInfo リスト オブジェクトを解析することで、リモート起動する FA デバイスの deviceId が取得されます。サンプルコードは次のとおりです。

  1. btn.setClickedListener(コンポーネント -> {
  2. // ボタンの応答を処理し、オンラインデバイスのリストを取得します
  3. リスト<デバイス情報> deviceInfoList =
  4. DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);
  5. (デバイス情報デバイス情報:デバイス情報リスト) {
  6. // FA をリモートで開始します。詳細については手順 4 を参照してください。
  7. }
  8. });

5. FAをリモートで起動する

FA をリモートで起動するための Intent を構築し、FA をリモートで起動します。 BUNDLE_NAME と ABILITY_NAME はグローバル変数であり、起動する必要があるリモート FA の BundleName (パッケージ名) と AbilityName (起動するアビリティ名) を示します。サンプルコードは次のとおりです。

  1. // FAをリモートで起動する
  2. インテント remoteIntent = 新しい Intent();
  3. //開始するFAのbundleNameとabilityNameを指定します
  4. // 例: BUNDLE_NAME = "com.huawei.codelab"   
  5. // ABILITY_NAME = "com.huawei.codelab.MainAbility"   
  6. // 現在の分散機能が関係していることを示すために分散フラグを設定します
  7. 操作 operation = new Intent.OperationBuilder().withDeviceId(deviceInfo.getDeviceId())
  8. .withBundleName(バンドル名)
  9. .withAbilityName(アビリティ名)
  10. .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
  11. 。建てる();
  12. リモートインテントの操作を設定します。
  13. 試す {
  14. // ターゲットデバイスに指定されたFAが含まれているかどうか
  15. リスト<AbilityInfo> abilityInfoList = getBundleManager().queryAbilityByIntent(remoteIntent, 0, 0);
  16. (abilityInfoList != null && !abilityInfoList.isEmpty())の場合 {
  17. リモートインテントを開始します。
  18. }
  19. } キャッチ (RemoteException e) {
  20. // 例外を処理する
  21. }

6. 完全な例

携帯電話を例にとると、ページ ボタンをクリックすると、同じ Huawei アカウントでログインしている同じネットワーク内の他の携帯電話で指定された FA が表示されます。ここでの確認には少なくとも 2 台の携帯電話が必要です。効果は以下のとおりです。

サンプルコードは次のとおりです。

  1. ohos.aafwk.ability.AbilitySlice をインポートします。
  2. ohos.aafwk.content.Intent をインポートします。
  3. ohos.aafwk.content.Operation をインポートします。
  4. ohos.agp.colors.RgbColor をインポートします。
  5. ohos.agp.components.Button をインポートします。
  6. ohos.agp.components.ComponentContainer をインポートします。
  7. ohos.agp.components.DirectionalLayout をインポートします。
  8. ohos.agp.components.element.ShapeElement をインポートします。
  9. ohos.bundle.AbilityInfo をインポートします。
  10. ohos.distributedschedule.interwork.DeviceInfo をインポートします。
  11. ohos.distributedschedule.interwork.DeviceManager をインポートします。
  12. ohos.rpc.RemoteException をインポートします。
  13.   
  14. java.util.List をインポートします。
  15.   
  16. パブリッククラス MainAbilitySlice は AbilitySlice を拡張します {
  17. //リモートで起動したFAのBundleName。自分で入力してください
  18. プライベート静的最終文字列 BUNDLE_NAME = "com.huawei.codelab" ;
  19. // FAをリモート起動するためのAbilityName。自分で入力してください
  20. プライベート静的最終文字列 ABILITY_NAME = "com.huawei.codelab.MainAbility" ;
  21.   
  22. @オーバーライド
  23. パブリックvoid onStart(インテント インテント) {
  24. super.onStart(インテント);
  25. DirectionalLayout レイアウト = 新しい DirectionalLayout(this);
  26. ComponentContainer.LayoutConfig config = 新しいComponentContainer.LayoutConfig(
  27. ComponentContainer.LayoutConfig.MATCH_PARENT、
  28. ComponentContainer.LayoutConfig.MATCH_PARENT);
  29. レイアウトを設定します。
  30. ボタン btn = new Button(getContext());
  31. ShapeElement buttonBg = 新しい ShapeElement();
  32. ボタンの背景色をRgbColorに設定します(新しいRgbColor(0, 125, 255));
  33. ボタンの背景のコーナー半径を設定します(25);
  34. btn.setBackground(ボタンの背景);
  35. ComponentContainer.LayoutConfig btnConfig = 新しいComponentContainer.LayoutConfig(
  36. ComponentContainer.LayoutConfig.MATCH_PARENT、
  37. ComponentContainer.LayoutConfig.MATCH_CONTENT);
  38. btn.setLayoutConfig(btnConfig);
  39. btn.setTextSize(50);
  40. btn.setPadding(10, 10, 10, 10);
  41. btn.setText( "リモートFAを開始" );
  42. レイアウトにコンポーネントを追加します。
  43. btn.setClickedListener(コンポーネント -> {
  44. // ボタンの応答を処理し、オンラインデバイスのリストを取得します
  45. リスト<DeviceInfo> deviceInfoList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);
  46. (デバイス情報デバイス情報:デバイス情報リスト) {
  47. // FAをリモートで起動する
  48. インテント remoteIntent = 新しい Intent();
  49. 操作 operation = new Intent.OperationBuilder()
  50. .withDeviceId(デバイス情報.getDeviceId())
  51. .withBundleName(バンドル名)
  52. .withAbilityName(アビリティ名)
  53. .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
  54. 。建てる();
  55. リモートインテントの操作を設定します。
  56. 試す {
  57. リスト<AbilityInfo> abilityInfoList = getBundleManager().queryAbilityByIntent(remoteIntent, 0, 0);
  58. (abilityInfoList != null && !abilityInfoList.isEmpty())の場合 {
  59. リモートインテントを開始します。
  60. }
  61. } キャッチ (RemoteException e) {
  62. // 例外を処理する
  63. }
  64. }
  65. });
  66. super.setUIContent(レイアウト);
  67. }
  68. }

🕮 説明

上記のコードはデモの参考用です。製品コードでは、データの検証と国際化を考慮する必要があります。

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ

https://harmonyos..com

<<:  パブリッククラウドからソフトウェア定義データセンターまで、マイクロソフトがハイブリッドクラウド攻勢を開始

>>:  クラウドネイティブマイクロサービスの実装を加速する方法: Baidu CRM の取り組み

推薦する

fastervm-90元/年/KVM/128Mメモリ/アジア最適化ラインVPS

FasterVM は、アジア、特に国内の通信ユーザー向けに最適化された新しいデータセンター、ロサンゼ...

ウェブサイト分析:鉄道省システムの分析と参照

最近、鉄道省の「新世代乗車券システム」をめぐって多くのニュースやコメントが出ています。実は、私は長い...

Linux 仮想化 KVM-Qemu Virtqueue の分析

[[390061]]この記事はWeChatの公開アカウント「LoyenWang」から転載したもので、...

ウェブマスターネットワークからの毎日のレポート:YYは上場に成功、Sina Weiboの商業価値は弱気

1. ウォールストリートジャーナル:YYの上場成功により、中国のコンセプト株に対する市場の信頼が回復...

Kubernetes の運用とメンテナンスに知っておくべき 12 個の Kubectl コマンド

kubectl コマンドライン ツールは、Kubernetes と対話するための主要なツールです。 ...

クラウドネイティブテクノロジーが5Gモバイルネットワークに与える影響

[[421463]]多くの通信サービスプロバイダー (CSP) は、ネットワーク インフラストラクチ...

ウェブサイトのユーザーエクスペリエンス: インタラクションについて知っておくべき視覚的な事柄

プロダクトマネージャーやインタラクションデザイナーが、ビジュアルデザインのドラフトが当初の計画とあま...

360 度の包括的な検索は、ウェブマスターの緊急のニーズを満たすことができますか?

検索エンジンのランキングはウェブマスターにとって致命的であり、特にSEO仲間にとってはご飯茶碗に等し...

DevOpsのボトルネックを克服するための4つのステップについてお話ししましょう

挑戦的なビデオ ゲームでレベルアップするために必要な手順は、DevOps の旅でレベルアップするため...

企業や貿易サイトのターゲットキーワードを簡単に設定できる3つのアプローチ

企業ウェブサイトや貿易促進ウェブサイトの第一歩は、顧客を引き付ける主な要素となる良質なコンテンツを作...

ウェブサイトを最適化した後、静的コンテンツを生成する必要がありますか?

コアヒント: ウェブサイトを最適化した後、静的コンテンツを生成する必要がありますか?動的な効果は静的...

Aoyou Hosting: 春に全11室のVPSルームが25%オフ、老舗ブランド、ウェブサイト構築などにおすすめ(IP変更は10元のみ)

今年はAoyou Hostingの10周年の節目です。同社はオーストラリアのShy Brotherに...

2回の核分裂実験の後、これらの提案と注意事項を知っておく必要があります

月収10万元の起業の夢を実現するミニプログラム起業支援プラン今年初めから、分裂はインターネット業界で...

Zunxiang.comの崩壊の暴露:高級品Eコマースのビジネスモデルは疑問視されている

他の人は貪欲だが、私は恐れている。バフェットのこの古典的な投資の引用は、高級電子商取引業界に非常に適...

王小川:攻撃を受けるインターネット大手からの生き残りのヒント

記者:ハン・ジチャン写真 | 王昭雑誌記者は、ネット界の新人で捜狗のCEOである王小川の人柄を、無神...