Подтвердить что ты не робот

Застрял в "Сброс памяти, приложение замерзнет. Бррр." сообщение

Я пытаюсь использовать LeakCanary для обнаружения утечек памяти в моем приложении, но это не идет дальше сообщения "Сброс памяти, приложение замерзнет. Brrr." Я ждал около 20 минут или около того, но никаких изменений. Такое же поведение на этих устройствах:  1. Asus fonepad 8 (Android 5.0)  2. Sony Xperia SP (Android 5.1.1 CM 12.1 custom)  3. HTC Desire C (Android 4.4 CM 11 custom)

Я сделал все, что было рекомендовано в инструкции:

public class ExampleApplication extends Application {

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

Ответ 1

Если вы находитесь на Android M, вам необходимо предоставить разрешение "написать внешнее хранилище", или утечка канарейки будет долгое время находиться в сообщении brrr. В своем ящике приложений долгое время нажмите на панель запуска для утечки канарейки (например, вы собираетесь ее удалить) и перетащите ее в "информацию о приложении" и включите разрешение на хранение.

Ответ 2

Вы должны добавить RefWatcher в свой фрагмент так же, как то, что описано на странице проекта: https://github.com/square/leakcanary

LeakCanary.install() возвращает предварительно сконфигурированный RefWatcher. Он также устанавливает ActivityRefWatcher, который автоматически обнаруживает, что активность протекает после вызова Activity.onDestroy().

public class ExampleApplication extends Application {

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

  private RefWatcher refWatcher;

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

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

public abstract class BaseFragment extends Fragment {

  @Override public void onDestroy() {
    super.onDestroy();
    RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity());
    refWatcher.watch(this);
  }
}

Кроме того, если вы хотите получить кучу кучи при утечке памяти, просто откройте Android Device Monitor от Android Studio и выберите вкладку "Проводник". В каталоге /mnt/shell/emulated/ 0/Download/leakcanary/detected_leaks вы найдете все файлы дампа кучи.

введите описание изображения здесь