如何在运行时android中捕获未知异常

时间:2012-08-22 16:16:33

标签: android exception

我已经编写了一些Android应用程序,在进行一些测试时崩溃了。

但是我不知道崩溃的原因..所以我需要保存崩溃的原因,以便稍后我可以看到...因为我不会在应用程序运行时将它连接到PC,我需要一些建议保存崩溃的原因..?

5 个答案:

答案 0 :(得分:1)

只需按以下步骤操作:

try{
    //your code which throws exception
}
catch(Exception e){
   e.printStackTrace();   //optional

   //save your exception in a text file on sd-card
}

稍后您可以阅读文本文件以了解例外

答案 1 :(得分:1)

到目前为止,我遇到的最佳方法是添加Internet权限,并使用ACRA。 ACRA允许您将报告发送到Google Docs电子表格,并可用于测试和制作。

除ACRA外,您有两种选择:

  1. 使用try catch块包围可能引发错误的每一段代码并将数据保存在某处。
  2. Thread.setDefaultUncaughtExceptionHandler()可用于设置在所有未处理的异常时调用的Handler。

答案 2 :(得分:0)

对于有限的细节感到抱歉,但是android没有记录选项吗?

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

我没有试过这个,可能会选择尝试,捕捉答案,但这只是另一种选择。

答案 3 :(得分:0)

你可以试试catch块:

try {
    //the code lies here
} catch(Exception e) {
    //here you can save the e.toString() to a FileOutputStream and then save the file
}

答案 4 :(得分:0)

您需要使用Application Class并设置“setDefaultUncaughtExceptionHandler”

public class YourApplication extends Application {

private Thread.UncaughtExceptionHandler defaultUEH;
// handler listener
private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler =
        new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread thread, Throwable ex) {

                // here I do logging of exception to a db
                PendingIntent myActivity = PendingIntent.getActivity(getApplicationContext(),
                        192837, new Intent(getApplicationContext(), YourActivity.class),
                        PendingIntent.FLAG_ONE_SHOT);

                AlarmManager alarmManager;
                alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                        15000, myActivity);
                System.exit(2);

                // re-throw critical exception further to the os (important)
                defaultUEH.uncaughtException(thread, ex);
            }
        };

public YourApplication() {
    defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
    // setup handler for uncaught exception
    Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}

}

并在Android Manifest中的应用程序标记中设置标记名称=“your.app.application.YourApplication”