提高开发效率--日志工具类

今天写关于ListView滑动删除的效果时,用到了事件拦截机制等相关原理,万里长城当然不是一天就造好了,因此各种调试,输出日志,查看运行过程。

每一次写日志输出都是重复log.e("类名","方法名")等,有时候还要加上变量值。然后就突然想有没有简单的方法只需要输入log的方法名就可以了,因为Java是可以获得当前类名和方法名的。上网百度了一下,果然有,但是没有发现可以直接用的,于是准备闭门造车,自己做一个这样的工具类。

首先,当然是查阅获取当前类名和方法名的方法(感觉有点绕口。。。),对于类名,比较简单:

	//不能获得需要的类名
          String clazzName = this.getClass().getName();  
          return clazzName.substring(0, clazzName.lastIndexOf('$'));
	// positionInStack是当前类的在栈中的位置
	int positinInStack = 1;
	StackTraceElement[] stacks = new Throwable().getStackTrace();
	String className = stacks[positionInStack].getClassName();

<span style="white-space:pre">	</span>//对于方法名的获取,有两种方法:
 <span style="white-space:pre">	</span>//方法1:通过Throwable的方法getStackTrace()</span>
<span style="white-space:pre">	</span>String funcName1 = new Throwable().getStackTrace()[1].getMethodName();  
 
        //方法2:通过Thread的方法getStackTrace()  
        String funcName2 = Thread.currentThread().getStackTrace()[2].getMethodName();  

   

接着就是用一个类,把相关的方法封装起来。类名为:LogUtils。类中的方法均为static类型,有利于提高效率。我能想到的原因有二个:一是static方法比实例方法快大约15%(书上看到的)。二是避免了内存浪费。static方法不需要实例化类就可以使用,从而不必为每一个当前类实例化一个LogUtils对象。

最后附上部分代码,你可以根据自己的需要对功能进行扩展:

/**
 * Created by zhangchao on 2016/2/20.
 */
public class LogUtils {
    static final int positionInStack = 2;

    public static String getCurrentClassName(){
        StackTraceElement[] ste = new Throwable().getStackTrace();
        return ste[positionInStack].getClassName();
    }

    public static String getCurrentMethodName(){
        StackTraceElement[] ste = new Throwable().getStackTrace();
        return ste[positionInStack].getMethodName();
    }

    public static void log_e(){
        Log.e(getCurrentClassName(),getCurrentMethodName());
    }

    public static void log_e(int num){
        Log.e(getCurrentClassName(),getCurrentMethodName()+num);
    }
    public static void log_e(double num){
        Log.e(getCurrentClassName(),getCurrentMethodName()+num);
    }

    public static void log_e(String str){
        Log.e(getCurrentClassName(),getCurrentMethodName()+str);
    }

    public static void log_i(){
        Log.e(getCurrentClassName(),getCurrentMethodName());
    }
    public static void log_i(double num){
        Log.e(getCurrentClassName(),getCurrentMethodName()+num);
    }
    public static void log_i(int num){
        Log.e(getCurrentClassName(),getCurrentMethodName()+num);
    }
    public static void log_i(String str){
        Log.e(getCurrentClassName(),getCurrentMethodName()+str);
    }
}
代码的功能比较简单,就不注释了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值