Androidexception处理最佳实践?

如果我的应用程序崩溃,它挂起几秒钟之前,我告诉Android的应用程序崩溃,需要closures。 所以我想用一般的手段来捕捉我应用程序中的所有exception:

try { // ... } catch(Exception e) { // ... } 

然后制作一个新的Activity ,解释应用程序即时崩溃(同时也让用户有机会发送带有错误细节的邮件),而不是因为Android而延迟。 有没有更好的办法来完成这个或者是这种沮丧?

更新:我正在使用启用了ART的Nexus 5,而且我不会注意到我曾经在应用程序崩溃时遇到的延迟(我最初讨论的是“挂起”)。 我想因为现在所有东西都是原生代码,崩溃信息会立即发生崩溃。 也许Nexus 5只是快速:)无论如何,这可能不会担心在未来的Android版本(鉴于ART将成为Android L的默认运行时)。

在这里,查看链接以供参考 。

在这里你创build一个类,说ExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler ..

在这个类里面,你会做你的生活节省的东西,如创build堆栈跟踪,并准备上传错误报告等….

现在是重要的部分,即如何捕捉这个exception。 虽然很简单。 在你的被覆盖的onCreate方法中,在super方法的调用之后,在你的每个Activity中复制以下代码行。

 Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this)); 

你的活动可能看起来像这样…

 public class ForceClose extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this)); setContentView(R.layout.main); } } 

希望这可以帮助…

您可以使用通用的警报对话框来快速显示错误消息。 例如…

 //****************************************** //some generic method //****************************************** private void doStuff() { try { //do some stuff here } catch(Exception e) { messageBox("doStuff", e.getMessage()); } } //********************************************************* //generic dialog, takes in the method name and error message //********************************************************* private void messageBox(String method, String message) { Log.d("EXCEPTION: " + method, message); AlertDialog.Builder messageBox = new AlertDialog.Builder(this); messageBox.setTitle(method); messageBox.setMessage(message); messageBox.setCancelable(false); messageBox.setNeutralButton("OK", null); messageBox.show(); } 

您也可以将其他error handling选项添加到此方法中,例如打印堆栈跟踪

我发现Log类中的“wtf”(这是一个糟糕的失败)方法。 从描述:

根据系统configuration,报告可能被添加到DropBoxManager和/或过程可能会立即终止一个错误对话框。

http://developer.android.com/reference/android/util/Log.html

希望这有助于某人