-
Notifications
You must be signed in to change notification settings - Fork 1
ReactContext
- ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactApplicationContext;
ReactApplicationContext context = getReactApplicationContext()
- SimpleViewManager/ViewGroupManager
import com.facebook.react.uimanager.ThemedReactContext;
@Override
public CustomView createViewInstance(ThemedReactContext context) {}
ThemedReactContext
主要负责监听/取消监听生命周期事件,同时覆盖ReactContext
中的监听事件。
- View/GroupView
import com.facebook.react.bridge.ReactContext;
ReactContext reactContext = (ReactContext)getContext();
为此上下文设置并初始化CatalystInstance,且只会初始化一次。
return <T extends JavaScriptModule>
返回与此上下文关联的CatalystInstance的指定JavaScriptModule的句柄.
- java
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.modules.core.DeviceEventManagerModule;
mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("YOUR_EVENTNAME",msg)
- JavaScript
DeviceEventEmitter
用法
import { DeviceEventEmitter } from 'react-native';
DeviceEventEmitter.addListener('YOUR_EVENTNAME', (msg) => {
console.log(msg)
});
- JavaScript
NativeEventEmitter
用法
建议使用NativeEventEmitter
而非DeviceEventEmitter
, 因为后者无法避免不同NativeModules
但同eventName
时的状况(only ios
)
import { NativeModules } from 'react-native';
const NativeEventEmitter = require('NativeEventEmitter');
const { YourNativeModule } = NativeModules;
this._eventEmitter = new NativeEventEmitter(YourNativeModule);
this._eventEmitter.addListener("YOUR_EVENTNAME",(msg) => {
console.log(msg)
})
判断是否存在与此ReactContext关联的指定模块接口的实例。
return <T extends NativeModule>
返回与此ReactContext关联的指定模块接口的实例。
- 例如: 在module中为viewmanager添加指定tag事件
@ReactMethod
public void getSignatureBitmap(final int viewTag, final Promise promise){
final ReactApplicationContext context = getReactApplicationContext();
UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class);
uiManager.addUIBlock(new UIBlock() {
@Override
public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) {
final SignaturePadView signaturePad;
try {
signaturePad = (SignaturePadView) nativeViewHierarchyManager.resolveView(viewTag);
promise.resolve(bitmapToString(signaturePad.getSignatureBitmap()));
} catch (Exception e) {
e.printStackTrace();
promise.reject(e.getMessage());
}
}
});
}
LifecycleEventListener
用于接收Activity生命活动的监听器。
当多个活动(YourActivity extends ReactActivity)共享一个React实例时,只有最新的生命周期才会转发给监听器,请考虑以下情形:
- 从ReactActivity A导航到ReactActivity B时将触发两个事件:
A#onHostPause
和B#onHostResume
。 来自ReactActivity A的所有后续生命周期事件(例如onHostDestroy
)都将被忽略 - 从ReactActivity B导航回ReactActivity A时将触发相同的事件:
B#onHostPause
和A#onHostResume
。 来自ReactActivity B的所有后续事件(例如onHostDestroy
)都将被忽略。 - 从ReactActivity A导航到非
<T extends ReactActivity>
或主屏幕时将触发两个事件:onHostPause
和onHostDestroy
。 - 从ReactActivity A导航到非
<T extends ReactActivity>
B将触发一个事件:onHostPause
。 稍后,如果ReactActivity A被销毁(例如由于资源争用(resource contention)),则会触发onHostDestroy
。
当主活动(host Activity
)收到resume event时(例如Activity#onResume
)或者主活动已经resumed并调用初始化(ReactContextBaseJavaModule#initialize
)好的native module时触发。
始终针对最新活动进行调用。
当主活动收到pause event时调用。 始终针对最新活动进行调用。
当主活动收到destroy event时调用(例如Activity#onDestory
)时调用。
仅在销毁最后一个ReactActivity时调用。
final LifecycleEventListener listener = new LifecycleEventListener() {
@Override
public void onHostResume() {
}
@Override
public void onHostPause() {
}
@Override
public void onHostDestroy() {
}
};
RCTContext.addLifecycleEventListener(listener);
取消LifecycleEventListener
监听事件
ActivityEventListener
用于接收Activity Event的监听器接口(interface)。如果您对此接口都不感兴趣的话可以考虑使用BaseActivityEventListener
类。
当主(活动/服务)收到Activity#onActivityResult
调用时调用。
当新的意图(new Intent()
)传递给活动时调用。
final ActivityEventListener listener = new ActivityEventListener() {
@Override
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
}
@Override
public void onNewIntent(Intent intent) {
}
};
RCTContext.addActivityEventListener(listener)
取消ActivityEventListener
监听事件
与Activity#startActivityForResult(Intent,int)
相同,只是将调用重定向到当前活动。返回活动是否已开始,因为如果在上下文处于正确状态之前调用了活动,则活动可能会失败。
获取此上下文当前附加到的活动,如果未附加,则获取{@code null}。 请勿长期使用此方法返回的对象,因为这将导致内存泄漏。
return JavaScriptContextHolder
获取指向与此实例关联的JavaScriptCore上下文的C指针(很长)。 采用以下模式可确保在使用JS上下文时不会将其清除:
JavaScriptContextHolder jsContext = reactContext.getJavaScriptContextHolder()
synchronized(jsContext) { nativeThingNeedingJsContext(jsContext.get()); }