gpt4 book ai didi

发布时的 android.util.Log - 我能做什么/不能做什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:50 25 4
gpt4 key购买 nike

我最近完成的一个应用程序的代码中有很多 Log.i Log.d Log.e。我即将发布这个应用程序,我真的不希望人们在将手机插入 adb 时看到它,但我确实希望它在那里用于我自己的调试。

我想扩展 android.util.log 并且在那里只有一个 bool 开关,这样我就可以在发布时关闭日志并在开发时打开它但是这个类是最终的,我是不是错过了一个技巧?

我真的不想遍历我的代码并删除所有代码,如果最坏的情况发生,我可以用 ctrl+h 全局替换 Log 来替换//Log,但这作为答案确实很糟糕。

我还意识到 Log.d 在运行时被剥离,但它仍在运行(损失了一点性能)所以不运行这将是一个额外的好处。

是的,所以基本上我正在寻找一种方法来以编程方式打开和关闭调试,这也可以让我稍后将其设为首选项或其他东西,如果人们想要查看它或提供帮助并发送它。

你们为此做了什么?

谢谢

最佳答案

正如 Octavian 指出的那样,插入一个日志常量是最好的方法。如果启用调试,为此编写一个调用原始日志记录方法的新类不是一个好主意。

良好做法:

if (C.D) { Log.d(C.T, "your log text here " + foo + bar); }

不良做法:

YourLog.d("your log text here " + foo + bar);

// and in YourLog.java's d() method:
... { if (debugging) Log.d(tag, text); }

如果类 C 的常量 D 为假,第一个解决方案非常快。如果您有复杂的字符串操作来创建您的日志字符串,那么在调试被停用时它们将不会被执行。如果 D 为假,编译器甚至可以在编译时删除这些操作,这可能导致运行时开销为零。第二个(不好的)解决方案将始终构建整个字符串并调用一个方法,这是您不需要的开销。

一般来说,第一个解决方案是最好的。是的,我确实将类和成员称为 C、D 和 T(常量/调试/标记)——出于打字过程中的性能原因。 ;-)

关于发布时的 android.util.Log - 我能做什么/不能做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4199563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com