Снижает ли слишком много записей в журнале производительность приложений Android?

Я хотел бы знать, может ли ведение журнала снизить производительность приложения? Кроме того, пожалуйста, дайте мне несколько советов по увеличению производительности приложений Android.


person Vishnu Rajan    schedule 21.10.2011    source источник
comment
Используйте журнал только для отладки... Удалите все сообщения журнала при загрузке фактической сборки.   -  person Krishnabhadra    schedule 21.10.2011
comment
Чрезмерное ведение журнала может иметь небольшое влияние на производительность, но в целом нет. (см. ссылки в ответе @gt_ebuddy). Во время разработки подключение к DDMS замедлит работу приложения.   -  person cistearns    schedule 21.10.2011
comment
Возможный дубликат Log.d и влияние на производительность   -  person rds    schedule 10.06.2016


Ответы (3)


да. Чрезмерное ведение журнала влияет на производительность любого приложения, а не только Android.

В руководстве для разработчиков предлагается деактивировать и отключить ведение журнала перед выпуском:

Отключите ведение журнала и отладку Перед сборкой приложения для выпуска обязательно отключите ведение журнала и параметр отладки. Вы можете деактивировать ведение журнала, удалив вызовы методов журнала в исходных файлах. Вы можете отключить отладку, удалив атрибут android:debuggable из тега в файле манифеста или установив для атрибута android:debuggable значение false в файле манифеста. Кроме того, удалите все файлы журналов или статические тестовые файлы, которые были созданы в вашем проекте.

Кроме того, вам следует удалить все вызовы трассировки отладки, которые вы добавили в свой код, такие как вызовы методов startMethodTracing() и stopMethodTracing().

Таким образом, вы должны подавить журналы в «выпускной» или «производственной» сборке вашего приложения.

Отключите его в манифесте Android, настроив параметр debuggable:

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

Другой способ

Создайте свой собственный класс регистратора и проверьте режим отладки перед выполнением log. Это позволяет выполнять одноточечную модификацию между режимом отладки и развернутым приложением, а также позволяет выполнять дополнительные действия, например запись в файл журнала.

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: как очистить для повышения производительности

person gtiwari333    schedule 21.10.2011
comment
По моему опыту, настройка манифеста не влияет на вывод журнала. Он просто контролирует, может ли отладчик подключиться к вашему приложению. - person cistearns; 21.10.2011
comment
@cistears Помогает ли настройка debuggable = false повысить эффективность? - person Sreekanth Karumanaghat; 21.06.2017

используйте оператор 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]-----------------------------------------
}

}

person IvoryCirrus    schedule 21.10.2011

Любой избыточный текстовый вывод замедлит ваше приложение, даже с настольным приложением. Чрезмерное ведение журнала замедляет работу, но в основном вам потребуется безумное количество передаваемых данных, что, кстати, не так уж сложно сделать с помощью цикла for или while. Вещи, которые иногда происходят в фоновом режиме во время ведения журнала, включают манипуляции со строками, рендеринг текста, управление кешем, фильтрацию данных, ограничение длины журнала, и этот список можно продолжить.

Есть несколько способов удалить logcat из вашего окончательного приложения, особенно те, которые связаны с ProGuard. ProGuard мне не помог, но есть много блестящих идей о том, как их удалить, включая программы-скрипты, такие как sed.

person Joe Plante    schedule 08.08.2012