Androidexception中使用printStackTrace()是一个坏主意?
在Android Exceptions中使用printStackTrace()是不是一个好主意?
} catch (Exception e) { e.printStackTrace(); }
是的,这是一个坏主意。 您应该使用专门为此devise的Android内置日志类: http : //developer.android.com/reference/android/util/Log.html
它提供了选项来loggingdebugging消息,警告,错误等
我相信这是你所需要的:
catch (Exception e) { Log.e(TAG,Log.getStackTraceString(e)); }
是。 printStackTrace()
方便,但不鼓励,尤其是在Android上,它通过logcat
可见,但没有指定的级别,没有一个适当的消息。 相反,正确的方法来logging一个例外是…
Log.e(TAG, "Explanation of what was being attempted", e);
请注意,该exception用作第三个参数,不会附加到消息参数。 Log
处理你的细节 – 打印你的消息(给出了你在代码中要做的事情的上下文)和Exception
的消息,以及它的堆栈跟踪。
问题是:在Andriod应用程序上下文中,对所有的堆栈跟踪都是有用的? 标准输出在运行时是否可见? 有人会关心吗?
我的观点是,如果没有人要检查标准输出并关心debugging错误,那么对这个方法的调用就是死代码,编写堆栈跟踪消息是一个不值钱的开销。 如果您只需要在开发时进行debugging,则可以设置一个可访问的全局常量,并在运行时检查它:
} catch (Exception e) { if(com.foo.MyEnvironmentConstants.isDebugging()) { e.printStackTrace(); } //else do noting }
我会避免使用printStackTrace()
,使用日志logging系统及其对exception的支持。
log.log(Level.SEVERE, "Uncaught exception", e);
所以如果你想改变日志logging的处理方式就容易多了。