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的处理方式就容易多了。