12

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

4

3 回答 3

19

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

开发人员指南建议您在发布前停用和禁用日志记录:

关闭日志记录和调试 确保在构建应用程序以供发布之前停用日志记录并禁用调试选项。您可以通过删除源文件中对 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 QA:

Log.d 和对性能的影响

Android 日志记录 - 如何清除以获得更好的性能

于 2011-10-21T04:53:43.817 回答
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]-----------------------------------------
}

}

于 2011-10-21T04:58:17.903 回答
1

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

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

于 2012-08-08T20:39:26.417 回答