debugging Log.d和对性能的影响

epfja78i  于 12个月前  发布在  其他
关注(0)|答案(5)|浏览(226)

我不完全确定我在文档中阅读的内容。是否可以将一堆log.d代码分散放置,或者我应该注解掉它们,以便它们不会影响应用的性能。
谢谢你,
我有点困惑,因为如果你读到log对象(documentation),你会看到:
详细程度从低到高的顺序是ERROR、WARN、INFO、DEBUG、VERBOSE。除非在开发期间,否则不应将详细编译到应用程序中。将编译日志,但在运行时剥离。始终保留错误、警告和信息日志。
这听起来像是可以在那里留下调试消息,因为它们是“剥离”的。无论如何,感谢您的答案,我会在完成后注解掉它们。不像我需要它们在那里一旦应用程序完成。
谢谢

laximzn5

laximzn51#

日志对性能有影响,因此建议您将其注解掉或使用条件语句进行日志记录。
例如

public class MyActivity extends Activity {
// Debugging
 private static final String TAG = "MyApp";
 private static final boolean D = true;
 @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(D) Log.e(TAG, "MyActivity.onCreate debug message");
 }

字符串
然后,当你发布你的发布版本时,只需将“D”更改为false即可。

pvcm50d1

pvcm50d12#

我的解决方案:

  • 在任何你喜欢的地方添加无保护日志语句
  • 将其剥离以进行发布构建
tmb3ates

tmb3ates3#

一定要把它们注解掉。它们加起来很快,会明显地减慢你的应用程序,特别是如果你把它们放在循环中的话。

3qpi33ja

3qpi33ja4#

简单地使用代码保护方法。

if (Log.isLoggable(LOG_TAG, Log.DEBUG)) {
Log.d(LOG_TAG, "Your log here");
}

字符串

ruyhziif

ruyhziif5#

是的,print、println、Log.d、Log.e和所有类似的方法都会影响性能。

  • 解决方案 *

创建一个名为 C 的类

class C{
public static String TAG="My_debug_tag";
public static boolean isInTesting=true;

public static void log(String tag, String msg){
 if(!isInTesting) return;

Log.d(tag==null?TAG:tag, msg);
 
}
}

字符串
并对所有日志使用这些方法,当你准备好生成final .apk/.aab时,只需设置isInTesting=false来禁用此方法的所有日志。

相关问题