この記事では、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 の取り組み

推薦する

推奨: prometeus-19.5$/四半期/Xen/1.5g メモリ/120g ハードディスク/3T トラフィック/ダラス

Prometeus は、Xen ベースの 1.5G メモリ、2 コア、120G ハード ドライブを備...

PRはウェブマスターにとって根深い問題である

PR は、すべてのウェブマスターにとって消えることのないコンプレックスであると言えます。 PR は、...

ローコード + サーバーレスは、次世代デジタル企業の開発に新たなパラダイムを切り開きます

近年、ローコードは徐々に重要な方向になってきています。投資機関の注目を集めているだけでなく、多くの企...

カーブランドのマーケティング戦略!

老趙氏は今年5月から、ブランド各社にDouyin検索の動向に注目するよう呼びかけ続けている。どれだけ...

Host1plus が VPS 価格を最大 30% 引き下げ、ウェブサイト構築に VPS を推奨、オプションのデータセンター 5 か所

2019年7月25日より、host1plusが長年実施してきたVPS価格がついに値下げされました。今...

スタートアップが愛用する8つのクラウドサービス

クラウド テクノロジーは、IT インフラストラクチャを構築する際のスタートアップにとって常に第一の選...

Google App EngineはPHP環境をサポート

Google の公式ブログによると、Google App Engine は 4 番目の言語である P...

SEO の混乱期を友人が乗り越えられるよう、いくつかのアイデアを共有します

SEO に長年取り組んでいる人のほとんどは、次の 2 つの現象を経験します。1. キーワードのランキ...

検索エンジン上のウェブサイトに関する否定的な情報も「最適化」できます。どうすればいいでしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますネガティブ...

中小企業に利益をもたらすクラウド コンピューティングの 5 つの活用方法

あなたのビジネスでクラウドを利用すべきかどうかお悩みですか?クラウド コンピューティングの最大のメリ...

オンライン教育:従来の教育の受動的でオープンな内容が弱点

ロビン・リー氏が言うように、インターネットは伝統的な産業を変えつつあります。タクシー配車アプリはすで...

Hongmeng HarmonyOSコンポーネントの分散適応とアプリケーションビジョン

[[377205]]詳細については、以下をご覧ください。 51CTOとHuaweiが共同で構築したH...

Hostus-Atlanta/4コア/1gメモリ/VPSの簡単なレビュー

Hostus の VPS の簡単なレビューです。HostCat の Web サイト zhujimao...

スーパーマーケットは新しいマーケティング戦略を考案しました。オンライン マーケティングの新しい戦略を考案しましたか?

みなさんこんにちは。私はHongtu Internetです。私は週に一度スーパーマーケットに買い物に...

検索エンジンの入札はデータを使った「ゲーム」である

データ分析といえば、特に長い間入札に触れていない多くの友人は、それが非常に「奥​​深くて神秘的」であ...