React Js 와 Native 간 의 통신
1. 프로 세 스 간 통신:
안 드 로 이 드 시스템 에서 응용 프로그램 은 여러 스 레 드 로 구 성 된 프로 세 스 에서 실 행 됩 니 다. 어떤 응용 프로그램 은 하나의 프로 세 스 를 포함 하고, 어떤 응용 프로그램 은 두 개의 프로 세 스, 심지어 여러 개의 프로 세 스 가 있 을 수 있 습 니 다.Android 시스템 에서 흔히 볼 수 있 는 프로 세 스 간 통신 방식 은 Binder, AIDL, Messenger 가 있 습 니 다.
2. 스 레 드 간 통신
Android 에서 스 레 드 와 스 레 드 의 통신 방식 은 'Intent, Handler' 가 있 습 니 다.
3. 전통 적 인 Js 와 안 드 로 이 드 간 의 통신
장면 은 보통 Andoid WebView 와 페이지 에 불 러 온 Js 방법 간 의 통신 으로 addJavascriptInterface 를 사용 하여 이들 의 통신 을 실현 합 니 다.
예 를 들 어 Js 페이지 에서 Android 의 Toast 알림 을 호출 하려 면 이렇게 할 수 있 습 니 다.
Java 단자:
mWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
mContext = c;
}
// @JavascriptInterface,
/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
JS 에서 다음 과 같이 호출 합 니 다:
<button onclick="showAndroidToast('addjavascriptinterface');">showAndroidToastbutton>
<script type="text/javascript">
function showAndroidToast(toast) {
Android.showToast(toast);
}
script>
2. React Js 와 Native 간 의 통신 방식 세 가지
React Js 와 Android 의 통신 은 전통 적 인 addJavascriptInterface 방식 을 사용 하지 않 고 세 가지 더 우호 적 인 방식 을 사용 합 니 다. 각각:
주요 인터페이스 설명:
/**
* Interface that represent javascript callback function which can be passed to the native module
* as a method parameter.
*/
public interface Callback {
public void invoke(Object... args);
}
사용 방법 은 Android 에서 ReactContextBaseJavaModule 을 계승 하 는 하위 클래스 에 JS 에 사용자 정 보 를 되 돌려 주 는 방법 을 쓰 는 것 입 니 다.
@ReactMethod
public void callBackTime(String name, Callback callback) {
callback.invoke(name, getDateAndTime());//invoke ;
JS 에서 다음 과 같이 호출 하고 받 습 니 다.
<Text style={styles.welcome}
onPress={this.getCallBackTime.bind(this)}
>CallBack
Text>
getCallBackTime() {
NativeModules.CommonModule.callBackTime("Allure",
(msg1, msg2) => {
console.log(msg);
ToastAndroid.show("CallBack :" + "
" + msg1 + msg2 , ToastAndroid.SHORT)
}
);
}
2. Promise 리 턴
Android 엔 드 코드 는 다음 과 같 습 니 다.
@ReactMethod
public void getBasicUserInfo(Promise promise){
WritableMap map = Arguments.createMap();
map.putString("user_id", "458");
map.putString("user_name", "jcstest");
map.putString("user_city", " ");
map.putArray("user_privileges", getPrivilegesWritableArray());
promise.resolve(map);
}
JS 엔 드 호출 은 다음 과 같 습 니 다.
<TouchableHighlight onPress={_getUserInfo.bind(this)}>
<Text> Promise resolve Text>
TouchableHighlight>
async function _getUserInfo (){
const _this = this;
try {
ToastAndroid.show("_getUserInfo", ToastAndroid.SHORT);
const data = await NativeModules.CommonModule.getBasicUserInfo()
global.currentUser = data || {};
_this.setState({
userInfo: data,
loading: false
});
ToastAndroid.show(this.state.userInfo.user_city, ToastAndroid.SHORT);
ToastAndroid.show(this.state.userInfo.user_privileges[0], ToastAndroid.SHORT);
} catch (e) {
ToastAndroid.show(e, ToastAndroid.SHORT);
}
}
3. RCTDeviceEventEmitter 가 메 시 지 를 보 냅 니 다.
Android 코드 는 다음 과 같 습 니 다.
public void sendTransMission(ReactContext reactContext, String eventName, @Nullable WritableMap params) {
if(reactContext != null){
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
}
JS 측 수신 메시지 코드 는 다음 과 같 습 니 다.
componentWillMount() {
this.listener = DeviceEventEmitter.addListener('EventName', function (msg) {
console.log(msg);
ToastAndroid.show("DeviceEventEmitter :" + "
" + msg.turn + "---" + msg.key, ToastAndroid.SHORT)
});
}
componentWillUnmount(){
//
this.listener.remove();
}
3. React Js 와 Native 통신 세 가지 방식 의 비교
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.