Tah*_*her 15 error-handling android try-catch
我知道防止系统崩溃的最佳方法是在不同的方法中捕获所有可能的异常.所以我在代码中的每个位置使用try catch块.但是,正如您所知,有时您会忘记测试某些导致某些无法处理的异常的情况,并且用户会收到"不幸的应用已停止工作..."消息.这对任何应用都不好.不幸的是,使用我的应用程序的人不是本地英语,因此他们也不会理解崩溃消息.
所以我想知道是否可以全局捕获所有可能的异常(在一些主类中只有一个try catch块而不是所有类和方法!!!)并自动重新加载应用程序而没有任何奇怪的消息?或者至少可以更改崩溃消息吗?
谢谢.
Bro*_*oak 20
在你的onCreate
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
//Catch your exception
// Without System.exit() this will not work.
System.exit(2);
}
});
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否有可能全局捕获所有可能的异常...并自动重新加载应用程序
不要这样做。如果您的应用进入一种状态,即使只是启动它也会导致崩溃,那么您将创建一个崩溃和重新启动的无穷循环,用户无法摆脱。
错误消息并不奇怪;它是系统消息,并且已翻译为设备上所有受支持的语言。
您唯一要做的就是使用某种崩溃报告库,无需用户做任何事情即可向您报告崩溃,以便您可以修复应用程序并提交更新。您可以UncaughtExceptionHandler在Application的应用程序中设置自定义onCreate(),但我将其限制为记录数据,并可能准备将其发送给您以进行调试,然后将调用转发回defaultUncaughtExceptionHandler。这正是崩溃报告库所做的。
我知道防止系统崩溃的最好方法是用不同的方法捕获所有可能的异常。所以我在代码的每个地方都使用try catch块。
不,这是在发布之前编写良好代码和修复错误的最佳方法。随意捕获所有形式的异常被认为是不好的做法。您应该仅在以下两种情况下使用try-catch块:
Integer.parseInt(),捕获NumberFormatException和向用户显示其输入无效的消息。但是,正如您所知,有时您忘记测试某些方案
然后改善您的编码和测试实践。请勿以此为借口采取轻率行动。
不幸的是,将使用我的应用程序的人不是英语母语,因此他们也不会理解崩溃消息。
哪个崩溃消息?如果您是指系统的崩溃消息,则应使用他们将设备设置为的任何语言。如果你的意思是你的 crashmessage(例如,在logcat中),他们不应该有。他们应该向您发送崩溃消息,您应该修复应用程序并分发更新。不要指望最终用户在确定导致您的应用崩溃的原因时花力气。最好使用某种崩溃报告库。
你去吧:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
new Thread() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(getActivity(),"Your message", Toast.LENGTH_LONG).show();
Looper.loop();
}
}.start();
try
{
Thread.sleep(4000); // Let the Toast display before app will get shutdown
}
catch (InterruptedException e) { }
System.exit(2);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11535 次 |
| 最近记录: |