成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JSFA調用PA之三Ability調用方式

原創
系統 OpenHarmony
我們借助官方文檔的案例來解讀一下 Ability 調用方式的具體實現方法。

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

??https://harmonyos.51cto.com??

引言

  • 【FFH】JSFA調用PA(一)Ability概念及Ability與Internal Ability
  • 【FFH】JSFA調用PA(二) Internal Ability調用方式

上兩篇文章我們已經了解到了Ability的概念,還有JS FA調用Java PA兩種方式,Ability和Internal Ability的區別,還有第二篇文章對InternalAbility調用方式的講解。

接下來我們借助官方文檔的案例來解讀一下 Ability 調用方式的具體實現方法。

在此之前,我們先來看一下一些相關概念。

相關概念

RPC( Remote Procedure Call)

Ability方式中,與FA通過RPC方式通信,先來了解一下什么是RPC,RPC 是 Remote Procedure Call ,翻譯過來就是遠程過程調用,說白了就是一個機器遠程調用并執行另一個機器上的函數。

所以他是個比較寬泛的概念,其中我們經常用到的HTTP協議就屬于常見的一種RPC實現方式。

在HarmonyOS有很多地方都用到了RPC方式通信,比如跨設備調用,遠程拉起FA,FA的遷移流轉等等。

Intent

了解完什么是RPC,那么RPC具體是通過什么讓發送方和接收機方知道要干什么的呢?其實就是接下來我們要說的對象之間傳遞信息的載體—Intent。

開發者的PA首次被FA連接時回調,并返回IRemoteObject對象,用于后續的業務通信。開發者需要繼承Ability類并重寫onConnect(Intent: intent)方法,其中該方法的參數就是Intent,所以他到底是拿來干嘛的呢?

在HarmonyOS中提供了Intent機制來協助Ability之間的通信,例如,當一個Ability需要啟動另一個Ability時,或者一個AbilitySlice需要導航到另一個AbilitySlice時。

Intent是一個將要執行的動作的抽象的描述,在HarmonyOS中由以下元素構成:

用大白話講,Intent就是作為Ability之間交流的粘合劑,接收方Ability可以從Intent獲得到發送方發送了什么請求。

JS FA調用Java PA — Ability調用方式

接下來進入正題。

JS FA端

這部分我們就不細說,因為和InternalAbility的實現方法差不多,只是action.abilityType值不一樣,要具體了解就看看上一篇文章吧。

// abilityType: 0-Ability; 1-Internal Ability
const ABILITY_TYPE_EXTERNAL = 0;
const ABILITY_TYPE_INTERNAL = 1;
// syncOption(Optional, default sync): 0-Sync; 1-Async
const ACTION_SYNC = 0;
const ACTION_ASYNC = 1;
const ACTION_MESSAGE_CODE_PLUS = 1001;
export default {
plus: async function() {
var actionData = {};
actionData.firstNum = 1024;
actionData.secondNum = 2048;

var action = {};
action.bundleName = 'com.example.hiaceservice';
action.abilityName = 'com.example.hiaceservice.ComputeServiceAbility';
action.messageCode = ACTION_MESSAGE_CODE_PLUS;
action.data = actionData;
action.abilityType = ABILITY_TYPE_EXTERNAL;
action.syncOption = ACTION_SYNC;

var result = await FeatureAbility.callAbility(action);
var ret = JSON.parse(result);
if (ret.code == 0) {
console.info('plus result is:' + JSON.stringify(ret.abilityResult));
} else {
console.error('plus error code:' + JSON.stringify(ret.code));
}
}
}

PA端(Ability方式)

這里我們還是以官方文檔的案例為參考,我們對官方案例進行一個步驟分解,以方便理解

??https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-fa-calls-pa-examples-0000000000618000??

1.導入相關ohos接口包

// ohos相關接口包
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.rpc.IRemoteBroker;
import ohos.rpc.IRemoteObject;
import ohos.rpc.RemoteObject;
import ohos.rpc.MessageParcel;
import ohos.rpc.MessageOption;
import ohos.utils.zson.ZSONObject;

import java.util.HashMap;
import java.util.Map;

2.創建一個繼承Ability的類并且重寫onConnect方法

創建完這個類之后,先重寫onConnect(Intent: intent)方法,并且在onConnect返回一個remote對象,供FA向PA發送消息。

public class ComputeServiceAbility extends Ability {
// 定義日志標簽
private static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0, "MY_TAG");

// FA在請求PA服務時會調用Ability.connectAbility連接PA,連接成功后,需要在onConnect返回一個remote對象,供FA向PA發送消息
@Override
protected IRemoteObject onConnect(Intent intent) {
super.onConnect(intent);
return remote.asObject();
}
}

3.繼承RemoteObject類重寫方法完成業務邏輯

private MyRemote remote = new MyRemote();  
class MyRemote extends RemoteObject implements IRemoteBroker {
private static final int SUCCESS = 0;
private static final int ERROR = 1;
private static final int PLUS = 1001;

MyRemote() {
super("MyService_MyRemote");
}

@Override
public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) {
switch (code) {
case PLUS: {
String dataStr = data.readString();
RequestParam param = new RequestParam();
try {
param = ZSONObject.stringToClass(dataStr, RequestParam.class);
} catch (RuntimeException e) {
HiLog.error(LABEL, "convert failed.");
}

// 返回結果當前僅支持String,對于復雜結構可以序列化為ZSON字符串上報
Map<String, Object> result = new HashMap<String, Object>();
result.put("code", SUCCESS);
result.put("abilityResult", param.getFirstNum() + param.getSecondNum());
reply.writeString(ZSONObject.toZSONString(result));
break;
}
default: {
Map<String, Object> result = new HashMap<String, Object>();
result.put("abilityError", ERROR);
reply.writeString(ZSONObject.toZSONString(result));
return false;
}
}
return true;
}
@Override
public IRemoteObject asObject() {
return this;
}
}

完整示例代碼請查看官方文檔

??https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-fa-calls-pa-examples-0000000000618000??

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

??https://harmonyos.51cto.com??

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-02-17 21:19:35

JSFA操作系統鴻蒙

2022-02-17 21:05:26

AbilityJS FAJava PA

2022-02-24 16:00:59

Ability鴻蒙JS

2021-11-15 15:11:14

鴻蒙HarmonyOS應用

2021-10-27 10:05:55

鴻蒙HarmonyOS應用

2021-09-10 15:13:41

鴻蒙HarmonyOS應用

2022-03-07 14:58:10

ArkUIJS FAJava

2022-07-11 16:26:37

eTS計算鴻蒙

2012-08-23 09:56:40

AJAX

2021-12-20 10:07:39

鴻蒙HarmonyOS應用

2012-06-19 13:25:15

Web

2009-12-22 15:14:33

WCF調用

2024-05-27 00:20:00

2025-06-06 00:00:00

JavaHTTPMCP

2024-08-13 08:25:16

C#外部程序方式

2010-01-21 11:23:58

C++函數調用

2010-03-04 11:07:21

Python解釋器

2023-10-30 09:35:01

注冊中心微服務

2010-01-20 14:25:56

函數調用

2010-01-19 13:36:16

VB.NET可選參數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品 | 免费小视频在线观看 | 精品国产一级 | 能看的av网站 | 午夜一区二区三区视频 | 欧美一区二区三区在线播放 | 综合久久av| 日本久草 | 亚洲精品91| 国产在线观看一区二区 | 午夜成人免费视频 | 欧美日韩视频在线播放 | 国产精品乱码一区二三区小蝌蚪 | 欧美黄色一级毛片 | 一区二区三区在线 | аⅴ资源新版在线天堂 | 免费观看日韩av | 中文字幕在线视频网站 | 红色av社区 | 久久久久久网站 | 中文字幕日韩一区 | 亚洲高清在线观看 | 麻豆久久久久 | 精品乱码一区二区三四区 | 国产一区二区精 | 嫩草视频在线免费观看 | 久久另类 | 国产欧美视频一区 | 久久在看 | 黑人巨大精品欧美一区二区免费 | 羞羞视频网站 | 成人在线视频观看 | 久久久av| 亚洲精品福利在线 | 久草成人 | 国产精品久久av | 米奇成人网 | 色综合天天网 | 久久综合一区 | 一区二区三区在线电影 | 国产精品久久久久久久久久 |