我正在构建一个React Native Application,我正在尝试构建一个完全本机的错误处理程序,作为本机级崩溃的最终回退,它完全绕过javascript。
我通过调整此博客帖子创建了一个全局错误记录器:
http://sterl.org/2016/02/android-global-exception-handler/
package com.myPackage;
import io.sentry.Sentry;
import android.content.Context;
import android.util.Log;
public class MyExceptionHandler implements Thread.UncaughtExceptionHandler {
private Context context;
private Thread.UncaughtExceptionHandler rootHandler;
public MyExceptionHandler(Context context) {
this.context = context;
this.rootHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(final Thread thread, final Throwable ex) {
Log.e("Alert","in handler");
Sentry.capture(ex);
if (this.rootHandler != null) {
this.rootHandler.uncaughtException(thread, ex);
} else {
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}
}
}
MainActivity.java中消耗了哪些内容:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("Alert","onCreateActivity");
Log.e("Alert", String.valueOf(BuildConfig.PRODUCTION_RELEASE));
if (BuildConfig.PRODUCTION_RELEASE) {
Context ctx = this.getApplicationContext();
String sentryDsn = BuildConfig.SENTRY_DSN;
Sentry.init(sentryDsn, new AndroidSentryClientFactory(ctx));
Log.e("Alert","instantiation happens next");
new MyExceptionHandler(MainActivity.this);
}
}
还有MainApplication:
@Override
public void onCreate() {
super.onCreate();
new FlockExceptionHandler(this);
AppEventsLogger.activateApp(this);
};
如果我添加
,这是有效的int x = 2/0;
在MainApplication
中,如果我在依赖库(在node_modules下)的(java代码)中添加相同的行,则在加载库时应用程序会进行红屏,并且永远不会触发我的自定义错误处理程序
为什么在这种情况下我的自定义处理程序没有被触发?我怎样才能实现这种行为?
此外,即使在自定义错误处理程序触发的情况下(例如,日志运行,我可以注销SENTRY_DSN,它是正确的),Sentry仍然没有得到通知。那是为什么?