首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生产过程中的Logcat

生产过程中的Logcat
EN

Stack Overflow用户
提问于 2015-02-03 03:08:13
回答 2查看 102关注 0票数 4

我过去常常使用我的一个自定义类,它负责记录日志,实现如下

代码语言:javascript
复制
public class Logger {

     public final static boolean DEBUG = true;

     public static void d(String tag, String msg) {
         if(DEBUG)
             Log.d(tag, msg);
     }

} 

当我发布应用程序时,我将标志设置为false,但有人说以下方法效率不高,因为Strings仍在内存中分配,然后又被释放

记录器是这样使用的:

代码语言:javascript
复制
Logger.d("tag", "message");

或者像这样,通过这样做,StringBuilder将被调用

代码语言:javascript
复制
Logger.d("tag", "server response: " + response + " timing: " + timing);

这是真的吗,dalvik/编译器不能优化它来防止这种行为吗?如果是这样,除了将if移到外部之外,我还可以做些什么来优化它呢?

EN

回答 2

Stack Overflow用户

发布于 2015-02-03 07:47:21

尝试使用Proguard将日志记录从生产apk的字节码中完全删除。在调试版本中,只需禁用"proguarding“即可。

例如:

Remove all debug logging calls before publishing: are there tools to do this?

顺便说一下,一些不必要的字符串连接不是很好,但通常不是很难(除非你在循环中做了很多次),所以不要妖魔化它:)

票数 1
EN

Stack Overflow用户

发布于 2015-02-03 03:20:38

一个简单的解决方案是只需在Activity中声明两个String变量,并在添加日志条目时重用它们,如下所示:

代码语言:javascript
复制
public class YourActivity extends Activity
{
    String tag;
    String message;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Rest of Activity

然后,每当您想要添加日志条目时,只需设置标记/消息值:

代码语言:javascript
复制
tag = "myTag";
message = "myMessage";
Logger.d(tag, message);

这样,您的if检查将保留在Logger中,并且不会分配额外的内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28284922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档