-
Notifications
You must be signed in to change notification settings - Fork 1
ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactContextBaseJavaModule
string
返回此视图管理类的名称。这将在JavaScript端NativeModules
中引用。
⚠️ DO NOT USE "RCT"- 若名称前缀为"RCT",在JS端引用时请忽略,如 "RCTCameraModule"的引用方式为
NativeModules.CameraModule
。 - 因为React Native Android内部包使用RCT作为前缀。为了避免名称冲突,建议您在自己的类中使用RCT以外的三个字母的前缀。
- 同理,IOS内部包则以"RK"为前缀。
- 详见https://github.com/facebook/react-native/search?l=C%2B%2B&q=RCT
- 若名称前缀为"RCT",在JS端引用时请忽略,如 "RCTCameraModule"的引用方式为
@Override
public String getName(){
return "CustomModule";
}
Map<String, Object>
返回JavaScript可访问的特定常量的映射对象。支持JSON类型。
这些常量是可通过CustomModule.Your_Constant
直接访问。
@Override
public Map<String, Object> getConstants() {
final Map<String, Object> constants = new HashMap<>();
constants.put("APPID", APPID);
constants.put("Your_Constant", CONSTANT);
return constants;
}
获取此上下文当前附加的Activity,如果未附加则返回null
。
请勿长期保存通过此方法返回的对象,这将导致内存泄漏。
- 例如:
永远不要将此方法返回的值存储在成员变量中。相反,在您实际需要
currentActivity
时再调用此方法,并确保检查null
if(getCurrentActivity() != null){
getCurrentActivity().startActivity(intent)
}
//Context mContext = getCurrentActivity() //错误示范
子类可以使用此方法访问作为构造函数传递的catalyst上下文。
getReactApplicationContext().getPackageName();
boolean
对于大多数第三方包(packages)中,hasConstant
几乎总是返回true
。 默认情况下,如果您不知道你的包中是否有一些常量(constants),则可以通过返回true
来判断。
创建CatalystInstance
之后,将在{@link CatalystApplicationFragment#createCatalystInstance()}
的末尾处调用此方法,以初始化
调用CatalystInstance
或者JS modules的NativeModules
。
boolean
https://blog.bam.tech/developer-news/how-to-speed-up-the-opening-of-your-application-react-native-on-android-using-turbo-modules
如果要重写已注册的其他本机模块(例如核心(core)程序),则返回true
。
默认情况下,所有模块均返回false
module释放资源,在{CatalystInstance#onHostDestroy}
之前调用
public abstract class ReactContextBaseJavaModule extends BaseJavaModule
Catalyst
原生模块(native module)的基类,其实现是用Java编写的。为方便起见,提供了{@link #initialize}和{@link #onCatalystInstanceDestroy}的默认实现。子类覆盖这些方法无需调用{@code super}
,因为这些方法的实现为空。
当生命周期事件发生时调用相应适当的方法,可以将BaseJavaModules链接到Fragments的生命周期事件以及{@link CatalystInstance}
的创建和销毁。
原生方法(Native Method)可以通过{@link ReactMethod}
注释公开给JS。这些方法的参数只能使用有限数量的类型:
- 基础类型(boolean, int, float, double)
- {@link String}从JS字符串映射
- {@link ReadableArray}从JS数组映射
- {@link ReadableMap}从JS对象映射
- {@link Callback} 从JS function函数映射,只能放在ReactMethod方法的最后一位(也可以多位Callback,如成功回调和错误回调)参数
- {@link Promise} 和Callback一样,使用Promise语法来简化代码。Promise和Callback只能存在一个。
所有带有{@link ReactMethod}注释的JS原生方法都必须返回{@code void}
请注意,不允许使用带有相同名称的{@link ReactMethod}注释的多个方法。(不能重载)
灵感来自react-native-exception-handler 优点:能catch到所有JS event error 缺点:不能catch到JSX UI manage/ Native module error,如
<View> Text strings must be rendered within a <Text> component </View>
JavaScript层捕获(短路)错误信息
"react-native": "0.60.0", // 较早版本仍会crash,详见commit 2dadb9e
global.ErrorUtils.setGlobalHandler(function(e, isFatal){
if (isFatal) {
alert(
'Unexpected error occurred',
`
Error: ${(isFatal) ? 'Fatal:' : ''} ${e.name} ${e.message}
We will need to restart the app.
`
);
} else {
console.log(e); // So that we can see it in the ADB logs in case of Android if needed
}
})