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

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

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

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

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

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

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

通过设置debuggable在Android Manifest中关闭它:

 

其他方式

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

 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和对性能的影响

Android Logging – 如何清除以获得更好的性能

在日志写入之前使用’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]----------------------------------------- } 

}

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

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