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

推薦する

Baidu入札広告で成功する10のポイント

SEO を実施する場合でも、有料広告を実施する場合でも、企業にとって利益が最優先です。国内中小企業の...

Mafengwo ビッグデータ プラットフォームにおける Kafka クラスターの最適化とアプリケーション拡張

Kafka は人気のあるメッセージ キュー ミドルウェアです。大量のデータをリアルタイムで処理でき、...

Googleの過剰最適化ペナルティアルゴリズムが正式に開始。対外貿易業界に冬が来るのか?

ここ数日は、インターネット上の人々にとって「嵐」のようだった。Baidu はアルゴリズム システムを...

クラウド移行時に企業が注意すべき問題は何ですか?

インターネット技術の継続的な発展に伴い、クラウド コンピューティングやその他の関連技術を導入する企業...

クラウド コンピューティングの限界: エッジでの機械学習が必要な理由

機械学習には高い処理要件があり、通信コストがかかることから、最終的にはエッジ(スマートフォン)で動作...

Rushmail: 企業が自社製品の宣伝にメールマーケティングを選択する理由

過去も現在も、マーケティングは常に多くの企業にとってホットな話題です。かつてはブログは最も優れたマー...

#ダブルチャージ:ImpactVPS-256mメモリVPS年間支払い6ドル、シアトル10Gポート

ImpactVPS のクリスマス プロモーションは今から始まります。クリスマスは過ぎましたが、VPS...

ステーションBには1つの大きな矛盾がある

資本市場はビリビリの前四半期の財務報告に失望した。ユーザー規模(MAUとDAU)は前月比で増加しなか...

新しいウェブサイトが 1 か月以内にホームページへのキーワードランキングを向上させるにはどうすればよいでしょうか?

新しいウェブサイトにとって、最初のそして最も困難なハードルは審査期間です。審査期間中、ウェブサイトに...

#ニュース# Linode: 現在 24 のデータセンターに拡大、クラウド サーバーの料金は引き続き月額 5 ドルから

Akamai による買収以来、Linode はより多くのデータセンター (少なくとも 23) に拡大...

AWS 対 Azure: 9 つの側面でどちらが優れているか

[51CTO.com クイック翻訳] クラウド コンピューティングの全盛期の到来に伴い、大手クラウド...

Java アーキテクチャ - SpringCloud 分散アーキテクチャ 権限管理

概要この記事では、分散アーキテクチャの権限管理の 2 つの状況、つまり統合認証アクセスとクロスプラッ...

オープンソースの無料モールシステムが必要な場合は、これをお読みください。読まないと後悔することになります!

私は10年以上eコマースプラットフォーム開発業界に携わっており、ショッピングモールシステムを構築した...

ユーザーエクスペリエンスがランキングを左右し、ランキングがマーケティングを左右する

SEO は最近ますます難しくなってきています。現在、SEO はキーワードのランキングだけではなく、ユ...