【问题标题】:catch all types of errors from whole application Android从整个应用程序 Android 中捕获所有类型的错误
【发布时间】:2017-06-11 14:11:35
【问题描述】:

我有一个大型 Android 应用程序,我需要记录我的应用程序中可能发生的所有类型的错误,包括 "Out of memory" 等。 有可能实现吗?

我可以使用

try {

} catch(throwable t) {

}

但是将整个代码添加到 try/catch 听起来很糟糕。以及如何捕获诸如“内存不足”之类的错误?

【问题讨论】:

  • 如果内存不足,Android如何抛出异常? ;)
  • 我猜没办法)
  • 其实我的第一条评论是讽刺。顺便说一句,所有必要的异常都在类/方法中定义,因此您知道要捕获什么。是的,使用通用异常,例如catch(Exception e) 是个坏主意。

标签: android


【解决方案1】:

最好的方法是加入分析。

请参考thiscrashlytics 是一个可以通知几乎所有问题的库。试试看。

【讨论】:

  • 看起来不错,但我无法在我的应用程序中使用其他库。
【解决方案2】:

是的,这是可能的。您可以编写一个父活动并在此example 中全局处理异常。之后您可以使用Google 分析、Crashlytics 查看您的每日崩溃报告等

【讨论】:

  • 所以我需要为每个活动创建一个父项,它会捕获所有类型的异常?例如,我可以在 Application 类中执行一次吗?
  • 可能在应用程序类中,或者您只需要一个父活动,您应用中的所有其他活动都将从该父活动或基础活动继承。
【解决方案3】:

跟踪崩溃报告的最佳方法是使用第三方库,例如 Fabric 或 firebase(google)。如果你不能使用 like this 库,你可以试试这个。

public class MyActivity extends Activity implements Thread.UncaughtExceptionHandler{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        if(ex.getClass().equals(OutOfMemoryError.class))
        {
            try {
                android.os.Debug.dumpHprofData(fileName);
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
        ex.printStackTrace();
    }
}

【讨论】:

  • 为什么不简单地将e.printStackTrace(); 替换为FirebaseCrash.report(e);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
相关资源
最近更新 更多