国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

2024-08-13 08:25:16

C#外部程序方式

2025-06-06 00:00:00

JavaHTTPMCP

2010-01-21 11:23:58

C++函數調用

2023-10-30 09:35:01

注冊中心微服務

2010-03-04 11:07:21

Python解釋器

2010-01-20 14:25:56

函數調用

2010-03-04 09:27:34

調用Python腳本
點贊
收藏

51CTO技術棧公眾號

国产精品丝袜久久久久久消防器材| 亚洲五月婷婷| 久久99精品久久久久婷婷| 免费av高清| 欧美成人在线免费| 国产精品亚洲专一区二区三区 | 夜夜嗨av一区二区三区网页 | 中文字幕永久在线不卡| 高清一区二区中文字幕| 国产精品va在线观看无码| 国产婷婷色综合av蜜臀av| 日韩精品视频网站| 亚洲区欧洲区| 亚洲精品自在在线观看| 精品国产91亚洲一区二区三区婷婷| 99精品国产在热久久| 欧美黑人激情| 日本一区视频在线播放| 精品播放一区二区| 日本视频中文字幕一区二区三区| 色图在线观看| 国产三级中文字幕| 正在播放国产一区| 2023国产精品自拍| 99精品在免费线中文字幕网站一区 | 奇米影视亚洲狠狠色| 国产精品久久毛片av大全日韩| 国产高清精品二区| 国产一二三区av| 欧美一区二区视频97| 一级做a爱片久久| 一个色综合网| 香蕉久久aⅴ一区二区三区| 中文字幕日韩精品一区二区| 中文字幕在线看视频国产欧美在线看完整| 91麻豆产精品久久久久久 | 九九爱精品视频| 欧美精品手机在线| 亚洲婷婷综合久久一本伊一区| 日本高清免费电影一区| 成人欧美亚洲| 亚洲国产日韩综合一区| 一区二区亚洲欧洲国产日韩| 久久精品夜色噜噜亚洲a∨| 国产一区二区三区四区大秀| 国际av在线| 宅男在线精品国产免费观看| 中文字幕精品久久久久| 中文字幕成人在线观看| 国精产品一区一区三区视频| 松下纱荣子在线观看| 少妇高潮大叫好爽喷水| 日韩中文字幕在线播放| 中文字幕一区不卡| 国产国产精品| 中文字幕在线三区| 黄色一级片黄色| 2019中文字幕免费视频| 日韩欧美999| 日本vs亚洲vs韩国一区三区| 日韩专区视频| 中文字幕第5页| 蜜桃成人在线| 日韩中文在线中文网三级| 亚洲女同一区二区| 夜久久久久久| 欧美亚洲人成在线| 黄页网址大全在线观看| 国产一区免费在线| 亚洲午夜久久久久久久| 亚洲女人小视频在线观看| 亚洲黄色一区| 一区二区三区日本视频| 在线观影网站| 天堂av免费看| 国产91热爆ts人妖在线| 日韩免费一区二区三区在线播放| 2020国产精品自拍| 欧美日韩视频| 日本精品久久| 欧美大片aaa| 野外做受又硬又粗又大视频√| 日本三级久久久| 亚洲成年人影院在线| |精品福利一区二区三区| 老**午夜毛片一区二区三区| 日韩在线精品强乱中文字幕| 东热在线免费视频| 国产一区二区网| 国产成人精品免费视频大全最热 | 91久久免费观看| 懂色av中文字幕一区二区三区| 久久人体视频| 男女啪啪999亚洲精品| 羞羞视频在线免费看| 隔壁人妻偷人bd中字| 亚洲精品免费网站| 精品国产欧美一区二区五十路 | 亚洲色图久久久| 九色91国产| 38少妇精品导航| 亚洲精品永久免费精品| 欧美午夜久久久| 91麻豆国产福利在线观看| 一本色道久久综合一区| 婷婷综合福利| 午夜无码国产理论在线| av福利精品| 国产特级嫩嫩嫩bbb| 无码av天堂一区二区三区| 国内精品久久久久久久果冻传媒| 97香蕉久久超级碰碰高清版| 亚洲精品按摩视频| 在线亚洲人成电影网站色www| 国产精品美女一区二区三区| 国产自产2019最新不卡| 精品电影一区| 精品久久久久久久| 免费欧美网站| 一二三四视频在线中文| 成年在线观看免费人视频| 天天综合网天天做天天受| 国产一区免费电影| 在线一区电影| 日韩欧美国产大片| 精品123区| 不卡av免费观看| 国模精品一区二区| 中文字幕在线第一页| 欧美成人福利在线观看| 日韩欧美不卡在线| 精品久久免费观看| 日本视频一区二区不卡| 国产精品裸体一区二区三区| 国产一区私人高清影院| 日本中文字幕久久看| 欧美成人国产va精品日本一级| 亚洲精品久久久久中文字幕欢迎你 | 一级欧洲+日本+国产| 不卡亚洲精品| 丁香花在线观看完整版电影| 高清日韩av电影| 精东影业在线观看| 久草在线免费二| 日韩一级理论片| 日韩在线综合网| 一本色道久久88亚洲精品综合| 视频在线99re| 日产精品久久久一区二区| 久久精品二区| 精品亚洲第一| 久久波多野结衣| 国产精品免费一区二区三区| 91久久偷偷做嫩草影院| 91日本在线视频| 亚洲最大av在线| 999国产在线| 久久国产日韩欧美| 欧美一区1区三区3区公司 | 女同视频在线观看| 蜜桃视频在线观看www社区 | 亚洲欧美成人一区二区三区| 国产精品久久久久久久蜜臀 | 欧美草草影院在线视频| 欧美一级理论片| 欧美成人官网二区| 亚洲国产精品小视频| 精品爽片免费看久久| 亚洲精品一二区| 中日韩美女免费视频网站在线观看 | 午夜精品久久久久久久99热 | 国产精品视频一区二区高潮| 国产精品久久一区| 91欧美精品成人综合在线观看| 亚洲va久久久噜噜噜久久天堂| 99国内精品久久久久久久软件| 国产精品久久波多野结衣| 欧美久久久久久久| 糖心vlog在线免费观看| 久久网站免费视频| 日韩一区二区三区久久| 亚洲精品666| 成人在线播放视频| 调教一区二区| 欧美在线va视频| 综合激情久久| 日韩欧美高清| 午夜在线精品偷拍| 国产一区高清在线| 久久色.com| 亚洲一二三区视频在线观看| 欧美性高清videossexo| 亚洲黄色在线看| 久久精视频免费在线久久完整在线看| 欧美大片大片在线播放| 国产成人精品视频在线观看| 国产精品美女黄网| 国产小视频免费| 国产午夜在线| 国产视频在线看|