不知道大家平常有没有这样的问题:我们在一些关键点打了一些log,作为开发的角度这个有助于以后定位问题,但是这些log在平常的时候是会消耗性能的,并且有时候测试或者性能方便会提出冗余log的问题,这就出现了一个问题这些log去掉还是不去掉?
比如我想要下方循环中打log


一般我们的做法就是上图这样的,直接打了,实际上每一行的log都是要耗资源性能的,所以我们外发的版本已经要尽量减少log的打印。
这里给大家两种种处理log的方式
【一】 使用广播的方式
首先我们创建一个LogUtils的类,给log加一个开关,如下所示:

这个时候我们在调用log的时候就是这样使用了:

这个时候肯定有读者问了,我的开关一直是false的,怎么打印啊,当然这个时候是不会打印的。
怎么办呢.....
很简单我们使用广播动态改变这个开关就好了,如下代码 创建一个广播监听两个action,如下图:


这样的话我们的动态控制log的开关就算完成了,来测试一下:
命令行发送广播:adb shell am broadcast -a "com.test.log.switch.open"
然后再点击发现log已经有了

然后命令行发送广播:adb shell am broadcast -a "com.test.log.switch.close"
点击就没有任何log打出了。。。。。。。
【二】 利用系统SystemProperties属性
首先我们改造我们的LogUtils类:


如上图,我们打印log的开关是读取系统的SystemProperties的属性,
private static final StringLOG_ENABLE_PROP ="ro.test.log";
这个使我们自己设置的,名字是自定义的(但是建议去看一下SystemProperties的命名规则,这里不做讲解,不同命名效果不同的)。
这样我们只需要用命令行 adb shell setprop ro.test.log true 就可以把log的开关打开了(最好使用adb shell getprop ro.test.log查一下有没有写进去,有时候会写不进去,如果是空白,插拔再执行一遍写入命令)。
杀掉我们的进程(APP),再次进入就会有log打印了(开关已经打开了)。
这两种方式各有利弊,广播的话更加灵活,更加方便,随时关闭,但是应用每次重启都需要发广播之后才生效
SystemProperties的话写入一次一直生效,直到手机重启才会清理SystemProperties而失效。
小伙伴们还有更好的方式吗?欢迎留言讨论。