2

我写了一些 android 应用程序,在做一些测试时它崩溃了。

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

4

5 回答 5

1

只需执行以下操作:

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

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

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

于 2012-08-22T16:19:25.143 回答
1

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

除了 ACRA,您还有两种选择:

  1. 用块包围所有可能引发错误的代码,try catch并将数据保存在某处。
  2. Thread.setDefaultUncaughtExceptionHandler()可用于设置在所有未处理异常时调用的 Handler。
于 2012-08-22T16:22:32.880 回答
0

抱歉,细节有限,但 android 还没有日志记录选项吗?

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

我还没有尝试过,可能会选择 try,catch 答案,但这只是另一种选择。

于 2012-08-22T16:27:12.157 回答
0

你可以做一个 try catch 块:

try {
    //the code lies here
} catch(Exception e) {
    //here you can save the e.toString() to a FileOutputStream and then save the file
}
于 2012-08-22T16:27:13.320 回答
0

您需要使用应用程序类并设置“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 的 application 标签中设置标签 name="your.app.application.YourApplication"

于 2014-07-01T12:46:08.233 回答