将调试/日志语句放入代码的有效方法 - 因此它们不会影响运行时

use*_*184 8 debugging android

在C衍生语言中,有可能有调试和运行时的条件代码.这样,运行时就没有剩余的开销.

如何使用Java/Android和Log.i语句执行此操作?如果我只使用一个常量全局布尔值debugOn,显然会在运行时留下冗余检查.

条件Log语句的最佳方法是什么

非常感谢

编辑:

由于在接受的答案之后有很多评论我在这里发表我的结论....

private static final boolean DEBUG = true;

if (DEBUG) Log.i("xxx",this.getClass().getName()+ "->" + Thread.currentThread().getStackTrace()[2].getMethodName() );
Run Code Online (Sandbox Code Playgroud)

...就像在xCode :)

Mal*_*olm 18

Android构建系统在BuildConfig.DEBUG不久前开始提供一个常量,所以我建议使用它并编写如下代码:

if (BuildConfig.DEBUG) Log.i(TAG, "Message");
Run Code Online (Sandbox Code Playgroud)

不会进行冗余检查,因为它是常数.此代码甚至可以通过编译器进行优化,但您也可以使用ProGuard.即使检查到位,对性能的任何可能影响也应该可以忽略不计.

这种方法曾经有一个缺点,你必须自己编辑这个常量,手动或通过构建文件中的自定义规则.但是,现在,这是由构建系统自动处理的,因此您不必自己做任何事情.

  • @Elemental是的,编译器应该删除死代码,即使它没有,那么ProGuard肯定会.ProGuard不只是混淆,它还缩小了代码并进行了大量优化,其中包括消除死代码分支. (3认同)