从 Android 中的线程捕获所有异常

阿布舍克·辛格

我想捕获由活动类中的任何语句引起的异常,以便我可以防止任何崩溃。不可能测试应用程序可能使用的所有可能场景。我想在应用程序中提供一个警报对话框或一个带有按钮的文本框来报告问题,但不希望应用程序崩溃。那么有没有办法做到这一点?

我尝试使用构造函数在类级别抛出异常,但这没有帮助。Try Catch 不能对每个语句都执行,那么什么是可以在整个活动类中捕获异常的好的防崩溃解决方案?

拉夫萨哈马德007

是的,您可以这样做创建一个ExceptionHandler类并收集崩溃记录..

 public class ExceptionHandler implements
        Thread.UncaughtExceptionHandler {
    private final Activity myContext;
    private final String LINE_SEPARATOR = "\n";

    public ExceptionHandler(Activity context) {
        myContext = context;
    }

    public void uncaughtException(Thread thread, Throwable exception) {
        StringWriter stackTrace = new StringWriter();
        exception.printStackTrace(new PrintWriter(stackTrace));
        StringBuilder errorReport = new StringBuilder();
        errorReport.append("************ CAUSE OF ERROR ************\n\n");
        errorReport.append(stackTrace.toString());

        errorReport.append("\n************ DEVICE INFORMATION ***********\n");
        errorReport.append("Brand: ");
        errorReport.append(Build.BRAND);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Device: ");
        errorReport.append(Build.DEVICE);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Model: ");
        errorReport.append(Build.MODEL);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Id: ");
        errorReport.append(Build.ID);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Product: ");
        errorReport.append(Build.PRODUCT);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("\n************ FIRMWARE ************\n");
        errorReport.append("SDK: ");
        errorReport.append(Build.VERSION.SDK);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Release: ");
        errorReport.append(Build.VERSION.RELEASE);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Incremental: ");
        errorReport.append(Build.VERSION.INCREMENTAL);
        errorReport.append(LINE_SEPARATOR);

        Intent intent = new Intent(myContext, CrashActivity.class); //start a new activity to show error message
        intent.putExtra("error", errorReport.toString());
        myContext.startActivity(intent);

        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(10);
    }
}

现在在您的 MainActivity 中使用以下方法初始化 ExceptionHandler:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
    setContentView(R.layout.activity_main);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java线程捕获所有异常?

来自分类Dev

在 Unity 中捕获所有异常

来自分类Dev

捕获类中的所有异常

来自分类Dev

如何捕获Web API 2中的所有异常?

来自分类Dev

如何捕获PL / SQL脚本中的所有异常?

来自分类Dev

捕获Javascript类方法中的所有异常

来自分类Dev

Scala:静默捕获所有异常

来自分类Dev

Android中捕获异常

来自分类Dev

Android线程退出但未捕获异常

来自分类Dev

线程退出与未捕获的异常android(OutOfMemory)

来自分类Dev

android中的哪个类具有sleep(),无需捕获异常?

来自分类Dev

捕获所有异常并在Jersey中返回自定义错误

来自分类Dev

捕获服务结构ReceiveReminderAsync中未处理的所有异常的正确方法是什么

来自分类Dev

拦截C#中的所有异常,即使它们已经被捕获

来自分类Dev

什么是正确的错误类,可用于捕获pyxb中CreateFromDocument的所有异常

来自分类Dev

如何在Rails视图(.erb文件)中捕获和记录所有异常

来自分类Dev

如何捕获WCF中的所有异常但包括自定义数据?

来自分类Dev

如何停止执行,直到所有异步任务在android中执行完毕?

来自分类Dev

为什么catch语句不能捕获所有异常?

来自分类Dev

捕获除AsyncException之外的所有异常

来自分类Dev

如何尝试/捕获所有异常

来自分类Dev

如何使用CherryPy捕获所有异常?

来自分类Dev

捕获网络问题中的所有异常

来自分类Dev

在ASP.NET C#中捕获所有异常,而不是在try {} catch {}块中捕获每个方法

来自分类Dev

在ASP.NET C#中捕获所有异常,而不是在try {} catch {}块中捕获每个方法

来自分类Dev

为什么在Android中收到“未捕获的异常退出线程”?

来自分类Dev

在Java中进行错误处理时,应该捕获异常以捕获所有异常还是单独捕获异常?

来自分类Dev

Android开发:“线程退出且未捕获异常”

来自分类Dev

捕获后继续尝试阻止。将所有异常记录在一次try catch中

Related 相关文章

  1. 1

    Java线程捕获所有异常?

  2. 2

    在 Unity 中捕获所有异常

  3. 3

    捕获类中的所有异常

  4. 4

    如何捕获Web API 2中的所有异常?

  5. 5

    如何捕获PL / SQL脚本中的所有异常?

  6. 6

    捕获Javascript类方法中的所有异常

  7. 7

    Scala:静默捕获所有异常

  8. 8

    Android中捕获异常

  9. 9

    Android线程退出但未捕获异常

  10. 10

    线程退出与未捕获的异常android(OutOfMemory)

  11. 11

    android中的哪个类具有sleep(),无需捕获异常?

  12. 12

    捕获所有异常并在Jersey中返回自定义错误

  13. 13

    捕获服务结构ReceiveReminderAsync中未处理的所有异常的正确方法是什么

  14. 14

    拦截C#中的所有异常,即使它们已经被捕获

  15. 15

    什么是正确的错误类,可用于捕获pyxb中CreateFromDocument的所有异常

  16. 16

    如何在Rails视图(.erb文件)中捕获和记录所有异常

  17. 17

    如何捕获WCF中的所有异常但包括自定义数据?

  18. 18

    如何停止执行,直到所有异步任务在android中执行完毕?

  19. 19

    为什么catch语句不能捕获所有异常?

  20. 20

    捕获除AsyncException之外的所有异常

  21. 21

    如何尝试/捕获所有异常

  22. 22

    如何使用CherryPy捕获所有异常?

  23. 23

    捕获网络问题中的所有异常

  24. 24

    在ASP.NET C#中捕获所有异常,而不是在try {} catch {}块中捕获每个方法

  25. 25

    在ASP.NET C#中捕获所有异常,而不是在try {} catch {}块中捕获每个方法

  26. 26

    为什么在Android中收到“未捕获的异常退出线程”?

  27. 27

    在Java中进行错误处理时,应该捕获异常以捕获所有异常还是单独捕获异常?

  28. 28

    Android开发:“线程退出且未捕获异常”

  29. 29

    捕获后继续尝试阻止。将所有异常记录在一次try catch中

热门标签

归档