捕捉Android的所有typesexception

我正在开发Android操作系统的应用程序。 由于这是我的第一个应用程序,我认为我已经犯了一些编程错误,因为我几乎无法追踪到错误的原因。 因此,我猜测,当我试图修复错误时,是否有一种方法可以在整个活动生命周期中捕获所有types的exception

这将是真棒,我越来越无聊看着我的星系S说:“对不起应用程序应用程序已经意外停止”:(

Solutions Collecting From Web of "捕捉Android的所有typesexception"

我真的,真的不推荐这个…

try { ... } catch (Exception e) { // This will catch any exception, because they are all descended from Exception } 

你在看你的堆栈痕迹来debugging你的问题? 跟踪他们不应该很难。 查看LogCat并查看大块的红色文本,看看哪个方法导致了你的崩溃,你的错误是什么。

如果您以这种方式捕捉到所有错误,则您的程序不会按预期行事,并且在您的用户报告时,您将无法从Android Market获得错误报告。

你可以使用UncaughtExceptionHandler来防止一些崩溃。 我使用一个,但只打印堆栈跟踪到一个文件,因为当我debugging远离我的电脑的手机上的应用程序。 但是我完成之后将未捕获的exception传递给默认的Android UncaughtExceptionHandler,因为我希望Android能够正确处理它,并且让用户有机会向我发送堆栈跟踪。

我假设像纯java

 try { } catch(throwable t) { } 

但这是非常糟糕的做法。

也看看

设置UncaughtException处理程序

如果您使用的是Eclipse,则强制closures应用程序(即您提到的消息)的每个exception都应logging在“LogCat”中。

查看LogCat最简单的方法是打开DDMS透视图并在LogCat选项卡上打开(如果尚未显示,则从“查看”菜单打开它)。

 import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.content.Context; public class SRSDexception implements Thread.UncaughtExceptionHandler { private Thread.UncaughtExceptionHandler defaultUEH; private Activity app = null; public SRSDexception(Activity app) { this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); this.app = app; } public void uncaughtException(Thread t, Throwable e) { StackTraceElement[] arr = e.getStackTrace(); String Raghav =t.toString(); String report = e.toString()+"\n\n"; report += "--------- Stack trace ---------\n\n"+Raghav; for (int i=0; i<arr.length; i++) { report += " "+arr[i].toString()+"\n"; } report += "-------------------------------\n\n"; // If the exception was thrown in a background thread inside // AsyncTask, then the actual exception can be found with getCause report += "--------- Cause ---------\n\n"; Throwable cause = e.getCause(); if(cause != null) { report += cause.toString() + "\n\n"; arr = cause.getStackTrace(); for (int i=0; i<arr.length; i++) { report += " "+arr[i].toString()+"\n"; } } report += "-------------------------------\n\n"; try { FileOutputStream trace = app.openFileOutput( "stack.trace", Context.MODE_PRIVATE); trace.write(report.getBytes()); trace.close(); } catch(IOException ioe) { // ... } defaultUEH.uncaughtException(t, e); } }