Dev Notes

LeakCanary

July 30, 2016

Полезная библиотека от Square для поиска утечек памяти в андроид приложении. Подключаем зависимости в build.gradle

dependencies {
   debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'
   releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
   testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
 }

добавляем инициализацию в Application класс приложения

public class ExampleApp extends Application {

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

и все готово. Этого достаточно для базовой настройки библиотеки. LeakCanary при запуске приложения будет следить за возможными утечками activity (по умолчанию) и предупреждать о них. Изображение взято с github авторов библиотеки Внешний вид

Также библиотека позволяет отслеживать любые объекты вашего приложения на возможные утечки (например fragment-ы). Для этого необходимо дописать код Application класса:

public class ExampleApp extends Application {
  private RefWatcher refWatcher;

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

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

затем в fragment-е добавить следующее:

public class ExampleFragment extends Fragment {
    ...
  @Override public void onDestroy() {
    super.onDestroy();
    Context context = getContext();
    if (context != null) {
      ExampleApp.getRefWatcher(context).watch(this);
    }
  }
    ...
}

Alexey Sadykov

Written by Alex - android developer,
react-native learning, PS4 gamer, music lover.