Log调试
- - ITeye博客在开发中我们一定不能避免使用Log类,但是这个类存在一个问题就是,当你在程序中使用了大量的Log,那么在程序开发完毕的时候,这将是一个问题,因为,你需要将所有的Log记录注释掉(当然,你不注释也是可以的). 我们可以写一个类,将Log类包装起来,使用一个boolean来控制所有的Log记录的显示. public static final boolean isDebug = true;//这里控制所有Log的显示情况.
在开发中我们一定不能避免使用Log类,但是这个类存在一个问题就是,当你在程序中使用了大量的Log,那么在程序开发完毕的时候,这将是一个问题,因为,你需要将所有的Log记录注释掉(当然,你不注释也是可以的)。那么有没有方便的方法来处理呢?
我们可以写一个类,将Log类包装起来,使用一个boolean来控制所有的Log记录的显示。
比如这样:
MyLog.java:
public class MyLog { public static final boolean isDebug = true;//这里控制所有Log的显示情况 public static void e(String tag, String message) { e(tag, message, null); } public static void e(String tag, String message, Throwable t) { if (isDebug) Log.e(tag, message, t); } public static void v(String tag, String message) { v(tag, message, null); } public static void v(String tag, String message, Throwable t) { if (isDebug) Log.v(tag, message, t); } public static void i(String tag, String message) { i(tag, message, null); } public static void i(String tag, String message, Throwable t) { if (isDebug) Log.i(tag, message, t); } public static void d(String tag, String message) { d(tag, message, null); } public static void d(String tag, String message, Throwable t) { if (isDebug) Log.d(tag, message, t); } public static void w(String tag, String message) { w(tag, message, null); } public static void w(String tag, String message, Throwable t) { if (isDebug) Log.w(tag, message, t); } }
这样,你只要控制 isDebug这个boolean的true和false就可以了。
还有一个地方你可以参考下,那就是我们一般在开发的时候,在打印的时候一般我们使用Log打印,第一个参数设置为该类的类名
一般可以这样定义:
private String TAG = "MainActivity";
然后在打印的时候:
Log.d(TAG, "jump to another activity!");
我们知道,在实际开发中我们会写一个Activity的基类,一般叫BaseActivity,在这个基类中我们一般对所有Activity具有的公共属性方法进行统一处理,同样,我们可以在这个类中覆盖所有的生命周期方法,这样做有什么好处呢?我们先看代码:
BaseActivity.java:
/** * 基类 * * * */ public class BaseActivity extends Activity{ protected String TAG = BaseActivity.this.getClass().getName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // requestWindowFeature(Window.FEATURE_NO_TITLE);//设置无标题 MyLog.v(TAG, "onCreate"); } @Override public void onStart() { super.onStart(); MyLog.v(TAG, "onStart"); } @Override protected void onResume() { super.onResume(); MyLog.v(TAG, "onResume"); } @Override public void onAttachedToWindow() { super.onAttachedToWindow(); MyLog.v(TAG, "onAttachedToWindow"); } @Override protected void onPause() { super.onPause(); MyLog.v(TAG, "onPause"); } @Override public void onStop() { super.onStart(); MyLog.v(TAG, "onStop"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); MyLog.v(TAG, "onDestroy"); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); MyLog.v(TAG, "requestCode:" + requestCode + ",resultCode:" + resultCode + ",data:" + data); } @Override protected void onRestoreInstanceState(Bundle inState) { MyLog.v(TAG, "onRestoreInstanceState"); super.onRestoreInstanceState(inState); } @Override protected void onSaveInstanceState(Bundle outState) { MyLog.v(TAG, "onSaveInstanceState"); super.onSaveInstanceState(outState); } }
这样做的好处就是:
1.当你写的Activity继承自BaseActivity的时候,你可以很方便的看到这个Activity的生命周期执行过程。
2.当你需要打印日志的时候,不需要再定义TAG了,在BaseActivity中自动就生成了,记住,this关键字表示的是,谁调用,this就代表谁。
protected String TAG = BaseActivity.this.getClass().getName();
当子类继承自BaseActivity的时候,这个TAG就是这个类的类名,将它设置为protected,那么子类就可以使用这个TAG了。这样做是不是比较方便呢?
我将上面的代码整理成一个Demo,有兴趣的同学可以去下载:
https://github.com/michaelye/LogDemo