在开发中我们一定不能避免使用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