我打算增加一個調試標誌,每Log.d
呼叫是否使用推薦的if(調試)語句?
public static final boolean DEBUG = FALSE;
if (DEBUG)
{
Log.d(TAG,"Debug"); //dead code
}
會死人的代碼將在編譯時被刪除前加入if statement
,或者將if statement
是怎麼回事,每次被稱爲?
我打算增加一個調試標誌,每Log.d
呼叫是否使用推薦的if(調試)語句?
public static final boolean DEBUG = FALSE;
if (DEBUG)
{
Log.d(TAG,"Debug"); //dead code
}
會死人的代碼將在編譯時被刪除前加入if statement
,或者將if statement
是怎麼回事,每次被稱爲?
不,這增加了代碼的詳細程度,只需使用一個日誌庫用於此目的,就像Log4J例如...
logger.debug("Here is some DEBUG");
在Android中,你可以使用android-logging-log4j ...
它不會完全移除,但由於CPU的分支預測,下一次沒有性能影響。
理想情況下,您應該使用記錄器的日誌記錄級別來確定是否應該調用記錄器。
注:像這樣一個簡單的方法調用旁邊沒有開銷,你是否檢查或沒有(和庫應該檢查),你在哪裏得到性能上的優勢是,如果你正在做的事情在日誌消息像
在這種情況下,只有在調試啓用時纔會顯示調試消息,但是每次都會構建字符串消息,這意味着更高效。
if(LOGGER.isDebugEnabled())
LOGGER.debug("The map is " + map);
你可能會考慮使用高級日誌記錄庫;或使用ProGuard從字節碼中刪除「Log」調用。看到類似的問題:http://stackoverflow.com/questions/2446248/remove-all-debug-logging-calls-before-publishing-are-there-tools-to-do-this – user46874
@ user46874:proguard似乎是有用的,我會試一試,謝謝。 – meh