可能重复:
Using global exception handling with “setUncaughtExceptionHandler” and “Toast”
我在UncaughtExceptionHandler
的一项活动中实施了onCreate()
。
在uncaughtException()
方法中,我尝试使用额外参数(错误消息和堆栈跟踪)打开另一个活动ErrorActivity
。该活动应仅显示(全局)AlertDialog
并处理日志等。
有人可以告诉我为什么在ErrorActivity
中的代码执行时oncoughtException
没有打开?我怀疑问题与Thread
有关。
这是我的第一个活动(模拟onCreate()
中的例外)
public class MainActivity extends Activity {
GlobalSettings settings;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.currentThread().setUncaughtExceptionHandler(
new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Intent intent = new Intent(MainActivity.this,
ErrorActivity.class);
Bundle bundle = new Bundle();
bundle.putString("ERROR", ex.getMessage());
intent.putExtras(bundle);
startActivity(intent);
}
} );
settings = (GlobalSettings) getApplication();
settings = null;
settings.getApplicationContext();
setContentView(R.layout.main);
}
}
我的第二个应该处理错误的活动:
public class ErrorActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("ERROR");
ShowAlertDialog(name);
}
}
答案 0 :(得分:2)
参考Using global exception handling with “setUncaughtExceptionHandler” and “Toast”
有Qberticus告诉
你没有看到任何东西,因为 您的UI线程发生异常 并且堆栈一直展开。所以 没有更多的Looper而且有 那里没有任何支持 显示Toast。
由于异常发生在UI上,我们无法进行UI操作:(
答案 1 :(得分:2)
您可以将属性android:process=":report_process"
添加到<activity>
元素,该元素引用AndroidManifest.xml
中的错误报告活动。
默认情况下,属于同一个应用程序的活动将在程序包名称标识的同一进程中运行。通过设置android:process
属性,您可以覆盖此属性。 android:process
以:
开头是指您的包中的私有标识符,这样您就可以在新流程中启动活动,而不会与其他包的进程冲突。