2011-10-21 19 views
8

我想知道日志记录是否会降低应用程序性能? 另外,请给我一些提示,以提高android应用程序的性能。是否有太多的日志写入会降低Android应用程序的性能?

+0

仅使用日志进行调试...当您上传实际版本时删除所有日志消息 – Krishnabhadra

+1

过度的日志记录对性能影响很小,但通常不会。 (请参阅@gt_ebuddy答案中的链接)。在开发中连接到DDMS会减慢应用程序的速度。 – cistearns

+1

[Log.d和对性能的影响]可能的重复(http://stackoverflow.com/questions/3773252/log-d-and-impact-on-performance) – rds

回答

15

最好不要在应用程序的实际构建中显示日志。

关闭它在Android清单通过设置可调试:

<application android:icon="@drawable/icon" 
     android:label="@string/app_name" 
     android:debuggable="false"> 

另一种方式

创建自己的记录器类:

检查执行日志前调试模式。它允许在调试模式和部署的应用程序之间进行单点修改,并允许执行额外的操作,例如写入日志文件。

import android.util.Log; 
public class MyLog { 
    private static final boolean isDebug = false;; 
    public static void i(String tag, String msg) { 
     if (isDebug) { 
      Log.i(tag, msg); 
     } 
    } 
    public static void e(String tag, String msg) { 
     if (isDebug) { 
      Log.e(tag, msg); 
     } 
    } 
} 


如需进一步信息读取 http://rxwen.blogspot.com/2009/11/logging-in-android.html

和所谓的问题答案:

Log.d and impact on performance

Android Logging - How to clear for better performance

+4

根据我的经验,清单设置对日志没有影响输出。它只是简单的控制一个调试器是否可以连接到你的应用程序 – cistearns

+0

** bold ** Thanks –

+0

@cistears设置debuggable =“false”是否有助于提高效率? –

1

使用 '如果' 语句日志写入之前。
您可以在应用程序发布时禁用日志。

例如:超过

public class LogTest extends Activity { 

private static final String TAG = "YOUR_LOG_TAG_NAME"; 
private static final boolean mDebug = true; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //--[Start Log example]----------------------------------------- 
    if(mDebug) Log.d(TAG, "Log Write Test"); 
    //--[End Log example]----------------------------------------- 
} 

}

1

任何文本输出将您的应用程序变慢,甚至桌面应用程序。过度的日志记录确实会减慢速度,但基本上需要发送大量疯狂的数据,顺便说一下,这对于for或while循环来说并不困难。在某些时候记录在后台发生的事情包括字符串操作,文本渲染,缓存管理,数据过滤,日志长度限制,并且列表继续进行。

有几种方法可以从最终的应用程序中删除logcat,尤其是那些涉及ProGuard的应用程序。 ProGuard没有为我工作,但有很多关于如何删除它们的精彩想法,包括像sed这样的脚本程序。

相关问题