ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Log类的设计 正式代码设计之前我们先考虑一下日志类的使用。 日志主要用在调试app 一些复杂的业务流程,借助log 可以很容易找到问题所在 因为android.util.Log 定义为final类(不可继承) 所以我采用组合的方式才重写一个可以控制开关的日志工具类。考虑到Log应用的广泛性,所以定义为static,生命周期为全局 ~~~ public class Log { /** * 日志的开关, false 表示不打印日志 */ private static boolean open = false; public static boolean isOpen() { return open; } public static void setOpen(boolean open) { Log.open = open; } ~~~ Log的开关控制,一般在app初始化的地方设置。后续再讨论 ~~~ public static void d(String tag, String msg){ if(open == false){ return; // 不打印日志 } android.util.Log.d(tag,msg); } ~~~   其中tag和msg 考虑到传入的参数需要频繁转型 比如说像打印一个int型的变量值。这时候会很不方便。同理其他非String类型的都需要转化为String 。 因为优化一下当前方法 ~~~ public static voidd(Object tag, Object msg){ if(open == false){ return; // 不打印日志 } android.util.Log.d(String.valueOf(tag), String.valueOf(msg)); } ~~~ 这时候如果传入的 tag == null 或者“” 或者 包含有” ” \n\r等字符 ,那么输出的结果可能不是我们想要的, 接着继续优化一下该方法 ~~~ package phoebe.frame.util; /** * 日志打印 * * @author coffee <br> * * 2015-12-16 下午9:39:41 */ public class Log { /** * 日志的开关, false 表示不打印日志 */ private static boolean open = false; public static boolean isOpen() { return open; } public static void setOpen(boolean open) { Log.open = open; } public static void d(Object tag, Object msg) { if (open == false) { return; } tag = handleMsgOrTag(tag); msg = handleMsgOrTag(msg); android.util.Log.d(String.valueOf(tag), String.valueOf(msg)); } private static Object handleMsgOrTag(Object msgOrTag) { if (msgOrTag == null) { msgOrTag = "[null]"; } else if (msgOrTag.toString().trim().length() == 0) { msgOrTag = "[\"\"]"; } else { msgOrTag = msgOrTag.toString().trim(); } return msgOrTag; } } ~~~