Мое приложение зависает при использовании утечки канарейки - почему? - PullRequest
0 голосов
/ 04 января 2019

Я работаю над приложением для Android TV, в котором я использовал Leak Canary Library, но проблема в том, что, когда я использую мой по прошествии некоторого времени, он показывает ошибку «Сброс памяти. Приложение зависает. Брррр». Я искал в Google все, что предложил, но все равно получаю ошибку.

В манифесте я предоставил разрешение на запись и чтение хранилища.

Код для класса приложения:

     public class App extends Application {

private RefWatcher refWatcher;

public static RefWatcher getRefWatcher(Context context) {
    App application = (App) context.getApplicationContext();
    return application.refWatcher;
}

@Override
public void onCreate() {
    super.onCreate();
    refWatcher = LeakCanary.install(this);

}

А в своей деятельности и фрагментах я использовал RefWatcher в OnDestroy (). способ.

1010 * т.е. *

        @Override
protected void onDestroy() {

    if (timer != null) {
        timer.cancel();
        timer = null;
    }
    if (handler != null)
        handler.removeCallbacks(Update);
    super.onDestroy();


    RefWatcher refWatcher = App.getRefWatcher(this);
    refWatcher.watch(this);
}

Но все равно я получаю ошибку Dumping Memory. Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Как следует из сообщения, LeakCanary останавливает приложение, чтобы сбросить его текущую память для анализа. Это нормальное поведение и предназначено. Вы должны получить уведомление с более подробной информацией о возможных обнаруженных утечках. Вы также можете проверить подробности в приложении «Leaks» или в приложении logcat вашего приложения.

0 голосов
/ 04 января 2019

LeakCanary с использованием различных типов зависимостей.

debugImplementation "com.squareup.leakcanary:leakcanary-android:1.6.2"
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:1.6.2"
debugImplementation "com.squareup.leakcanary:leakcanary-support-fragment:1.6.2"

Если ваше приложение на стадии выпуска , в lib никогда не появится «Dumping Memory. Приложение зависает. Brrrr».

Вот мой пример init LeakCanary.Внутри Application() класса, в методе onCreate(), я звоню

private void initLeakCanary() {
    if (LeakCanary.isInAnalyzerProcess(this))
        return;
    LeakCanary.install(this);
}
...