生产过程中的Logcat

时间:2015-02-02 19:08:13

标签: java android

我曾经使用我的自定义类负责使用以下实现进行日志记录

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仍在分配,然后在内存中释放

正在使用的记录器:

Logger.d("tag", "message");

或者可能是这样,通过这样做,StringBuilder将被调用

Logger.d("tag", "server response: " + response + " timing: " + timing);

是真的,dalvik /编译器可以对其进行优化以防止此类行为。如果有的话,除了移动if之外,我还能做些什么来优化它?

2 个答案:

答案 0 :(得分:1)

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

E.g:

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

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

答案 1 :(得分:0)

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

public class YourActivity extends Activity
{
    String tag;
    String message;

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

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

tag = "myTag";
message = "myMessage";
Logger.d(tag, message);

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