public class ChildActivity extends BaseActivity {
@SuppressWarnings("unused")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int a=1/0;
}
}
处理错误的类:
public class BaseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
Log.e("Alert","Lets See if it Works !!!");
}
});
}
}
public class BaseActivity extends Activity {
@Override
public void onCreate() {
super.onCreate();
final Thread.UncaughtExceptionHandler oldHandler =
Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(
Thread paramThread,
Throwable paramThrowable
) {
//Do your own error handling here
if (oldHandler != null)
oldHandler.uncaughtException(
paramThread,
paramThrowable
); //Delegates to Android's error handling
else
System.exit(2); //Prevents the service/app from freezing
}
});
}
}
请记住,The RuntimePermission("setDefaultUncaughtExceptionHandler")是在设置处理程序之前检查的,并确保在设置处理程序之后通过抛出未捕获的异常来使进程停止,因为事情可能处于不确定状态。 不要显示任何东西,实际上UI线程可能已经崩溃了,写一个日志和/或发送详细信息到服务器,而不是。你可能想看看this question and its answers。
7条答案
按热度按时间alen0pnh1#
基本的例子,有人谁来到这个页面的解决方案:)
处理错误的类:
q9yhzks02#
下面是the answer的Mohit Sharma变体,具有以下改进:
代码:
jobtbby33#
对于那些只想在设备上(在调试配置中)看到应用崩溃时的异常详细信息的人。这是应用程序类:
它使用外部应用程序,因为您的UI线程可能不再工作。
eagi6jfj4#
请记住,
The RuntimePermission("setDefaultUncaughtExceptionHandler")
是在设置处理程序之前检查的,并确保在设置处理程序之后通过抛出未捕获的异常来使进程停止,因为事情可能处于不确定状态。不要显示任何东西,实际上UI线程可能已经崩溃了,写一个日志和/或发送详细信息到服务器,而不是。你可能想看看this question and its answers。
bnl4lu3b5#
我只是想指出我到目前为止的经验。我正在使用https://stackoverflow.com/a/26560727/2737240建议的解决方案,在将控制权交给默认异常处理程序之前,将异常刷新到日志文件中。
然而,我的结构看起来像这样:
其中
handleUncaughtException(thread, e, defaultEH);
写入日志并将调用移交给原始UncaughtExceptionHandler。所以使用这段代码会发生以下情况:
所以这是一个无限增长的链条,导致了两个问题:
1.指定的自定义代码(在我的例子中是写入日志文件)将被多次调用,这不是所需的操作。
因此,我又添加了一件事,最终使这个工作没有问题:
通过此解决方案,我们可以确保:
ni65a41a6#
如果要使用此库
https://github.com/selimtoksal/Android-Caught-Global-Exception-Library
创建你的TransferObject不是所有的在你的活动中只是在基本活动中使用
xdnvmnnf7#
您需要在应用程序类中添加以下代码