用Logs进行基础安卓debugging

来源:互联网 发布:百度云盘在淘宝怎么买 编辑:程序博客网 时间:2024/06/04 00:52

就像大多数软件工程领域,debugging在安卓开发中扮演重要的角色。正确的设置你的应用debugging能够减少大量时间和困惑。不幸的事,在我的经验看来,没有很多初学者学着正确的用安卓SDK自带的工具类。除非你是以为有经验的开发者,这是我个人的看法,安卓debugging应该按照一套模式。因为以下几点原因会带来一些好处:

  • 它能帮你在代码间预见bugs。为你的开发工作区设立debugging将会给你带来领先当将来可能遇到bug时。
  • 在debugging的过程中,它给你中央化的控制力。混乱稀少的安排log消息会让你的logcat输出很难推测debuggings结果。打开或关闭一些log消息组,能让你的生活简单多了,特别是当你的应用很复杂时。

Log 类

你们可能不知到,安卓SDK自带了一个有用的logging工具类叫做android.util.Log. 这个类允许打出的log消息根据严重度分类;每种LOG方法有自己的消息,按照如下从低到高的优先级:

  • Log.v() 方法输出 log verbose messages (啰唆的log消息).
  • Log.d() 方法输出log debug messages.
  • Log.i() 方法输出log informational messages (log 情报消息).
  • Log.w() 方法输出log warnings(警告).
  • Log.e() 方法输出log errors(错误).
  • Log.wtf() 用来log应该永远不会发生的事件。("wtf" 是多么可怕的失败的缩写),就像java的assert方法。

大家应该总是去考虑用适当的这六种方法来过滤你的logcat输出。去理解什么时候应该往你的应用里加log也很重要:

  • Verbose logs除了开发阶段,其他时候都不应该加进程序里。当你的程序准备发布到世界上时,你要么把这些log注释掉,要么用ProGuard去掉你JAR执行包里的verbose log(Chrstopher 在StackOverflow帖子里给了答案http://stackoverflow.com/q/2018263/844882)。
  • Debug logs 被编译进去但是在运行时被忽略。
  • Error,warning和informational logs 应该一直保留。

一个简单的模式

下面是一个简单的debugging实现方法。一个全局static string变量来表示特定的类(比如一个Actiity、service、adapter等等),一个boolean变量表示log信息该不该被logcat打出。

public class SampleActivity extends Activity {  /**   * A string constant to use in calls to the "log" methods. Its   * value is often given by the name of the class, as this will    * allow you to easily determine where log methods are coming   * from when you analyze your logcat output.   */  private static final String TAG = "SampleActivity";  /**   * Toggle this boolean constant's value to turn on/off logging   * within the class.    */  private static final boolean VERBOSE = true;  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    if (VERBOSE) Log.v(TAG, "+++ ON CREATE +++");  }  @Override  public void onStart() {    super.onStart();    if (VERBOSE) Log.v(TAG, "++ ON START ++");  }  @Override  public void onResume() {    super.onResume();    if (VERBOSE) Log.v(TAG, "+ ON RESUME +");  }}

别担心你的log信息在logcat中很有创意。比如上边这个例子运行后logcat会输出的很有格式、很适合人类阅读:

V SampleActivity +++ ON CREATE +++V SampleActivity ++ ON START++V SampleActivity + ON RESUME +

总结

这篇帖子简单的介绍了安卓debugging可以(应该)遵循的基本思路。将来会介绍的更深入一些。


Refference:

Alex Lockwood,May 30, 2012, http://www.androiddesignpatterns.com/2012/05/intro-to-android-debug-logging.html

0 0
原创粉丝点击