# 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;
}
}
~~~
- 前言
- Android sdk開發 - 序
- Android sdk開發(一)Application設計
- Android sdk開發(二) Log日志類的設計
- Android SDK開發 (三) App的屬性配置
- android SDK開發-- 功能設計
- android SDK開發 -- TitleBar封裝(一)
- android SDK開發 -- TitleBar封裝(二)
- Android SDK開發 -- TitleBar重構 (代理模式的使用)
- Android SDK開發 -- TitleBar重構 (代理模式-優化)
- android SDK核心功能 -- 消息傳遞與界面刷新
- Android SDK開發 -- TitleBar重構 - 使用策略模式、舍棄代理模式