【问题标题】:Phonegap and catching global android exceptionsPhonegap 和捕获全局 android 异常
【发布时间】:2011-06-06 19:14:45
【问题描述】:

我正在创建一个 phonegap 应用程序并希望防止它崩溃。我想如果我能找到一种在全局级别管理异常的方法,我就可以捕获异常并忽略它。但是,到目前为止,我的错误捕获代码似乎并没有发现它。

知道我做错了什么吗?我应该尝试其他方法吗?

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {

        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            Log.e("uncaught error",ex.getMessage());
            Log.e("uncaught error",ex.getStackTrace().toString());

        }
    });

【问题讨论】:

    标签: java android cordova


    【解决方案1】:

    实际上,这听起来不是一个好主意。

    异常机制被设计为单独响应每个异常。当然,您可以对其进行微调并为每种异常类型设置非常特殊的 catch 子句,或者使用更粗略的方法并使用继承将异常组合在一起。

    但是为正在发生的所有事情设置一个单独的 catch 子句并不是一个好主意。尽管有一种情况我会推荐这种模式:对于需要特别健壮且始终正常运行、能够从任何情况下恢复的服务器。

    但对于一个安卓应用程序,没有。

    所以,我建议你仔细观察你的代码在哪里通过 logcat 抛出异常,并修补程序面临的每一个问题。 如果你正在寻找一种方法,在某个地方而不是在整个程序中,捕捉任何抛出的东西,使用 Throwable 接口,所有可以抛出的超类(接口)。

    try
    {
      //your code
    }//try
    catch( Throwable t)
    {
      t.printStackTrace();
    }//catch
    

    问候, 斯蒂芬

    【讨论】:

    • 问题是我的应用程序基本上是在 web 视图中运行(使用电话间隙)。 Phonegap 是允许以 javascript/html/css 编写的应用程序作为本机应用程序运行的框架(查看 web 视图)。实际上没有任何地方可以放置 try/catch 块,因为在框架中某处加载所有内容后抛出错误。我不想知道框架的细节;我只想能够忽略它抛出的错误。我已经在 javascript 中发现了错误,并且我遗漏的任何内容都不应该使 webview 崩溃。这个来自其他地方。
    • 异常可能在其他地方被“捕获”。 setDefaultUncaughtExceptionHandler() 仅在 nothing 在 Runnable.run() 中捕获异常时有用
    • 如果迫不得已,您可以破解 Phonegap 本身 :)
    • 我收到一个提示错误的消息框,然后程序关闭。这是具有未捕获异常的 android 应用程序的正常行为,还是 phonegap 框架中的自定义异常处理?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2020-08-19
    • 2018-06-14
    • 2014-07-03
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多