是否有太多日志写入会降低Android应用程序性能?

时间:2011-10-21 04:46:02

标签: android android-logcat

我想知道日志记录是否会降低应用程序性能? 另外,请给我一些提高Android应用程序性能的技巧。

3 个答案:

答案 0 :(得分:18)

是。过多的日志记录会影响任何应用程序(不仅仅是Android)的性能。

developer guide建议您在发布前停用和停用日志记录:

  

关闭日志记录和调试确保停用日志记录和   在为应用程序构建之前禁用调试选项   发布。您可以通过删除对Log方法的调用来停用日志记录   在您的源文件中。您可以通过删除来禁用调试   你的标签中的android:debuggable属性   清单文件,或将android:debuggable属性设置为false   在您的清单文件中。此外,删除任何日志文件或静态测试文件   在你的项目中创建的。

     

此外,您应该删除添加到您的所有调试跟踪调用   代码,例如startMethodTracing()和stopMethodTracing()方法   调用

因此,您应该禁止应用程序的“发布”或“生产”版本中的日志。

通过设置debuggable:

在Android Manifest中关闭它
<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

和SO QAs:

Log.d and impact on performance

Android Logging - How to clear for better performance

答案 1 :(得分:1)

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

示例:

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]-----------------------------------------
}

}

答案 2 :(得分:1)

任何超出的文本输出都会降低您的应用程序速度,即使使用桌面应用程序也是如此。过多的日志记录确实会降低速度,但是您基本上需要发送大量数据,顺便说一下,使用for或while循环并不难。在某些时候记录在后台发生的事情包括字符串操作,文本呈现,缓存管理,数据过滤,日志长度限制,并且列表继续。

有几种方法可以从最终应用中删除logcat,尤其是那些涉及ProGuard的方法。 ProGuard并不适合我,但有很多关于如何删除它们的好主意,包括像sed这样的脚本程序。