Утечка памяти с помощью ProgressDialog в классе приложений Android

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

Мой код приложения:

public class AppController extends Application {
public static final String TAG = AppController.class.getSimpleName();
private static AppController mInstance;
AppCompatDialog progressDialog;

@Override
public void onCreate() {
    super.onCreate();
    if (LeakCanary.isInAnalyzerProcess(this)) {
        // This process is dedicated to LeakCanary for heap analysis.
        // You should not init your app in this process.
        return;
    }
    LeakCanary.install(this);
    // Normal app init code...

    mInstance = this;
}

public static synchronized AppController getInstance() {
    return mInstance;
}

/**
 * Progress Dialog
 */
public void progressON(Activity activity) {
    if (activity == null) {
        return;
    }
    if (progressDialog != null && progressDialog.isShowing()) {
    } else {
        progressDialog = new AppCompatDialog(activity);
        progressDialog.setCancelable(false);
        progressDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        progressDialog.setContentView(R.layout.progress_loading);
        progressDialog.show();
    }

    final LottieAnimationView lottieAnimationView = (LottieAnimationView) progressDialog.findViewById(R.id.progress_lottie);
    lottieAnimationView.playAnimation();

}

public void progressOFF() {
    if (progressDialog != null && progressDialog.isShowing()) {
        progressDialog.dismiss();
    }
}
}

и когда я использую / выключаю прогресс:

AppController.getInstance().progressON(PartnerDetailActivity.this);
AppController.getInstance().progressOFF();

Изображение ошибки: Утечка памяти с помощью ProgressDialog в классе приложений Android

1
0
591
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

progressDialog = new AppCompatDialog(activity);

Вы должны вызвать progressDialog = null после progressDialog.dismiss(); и переместить это приложение в отдельный класс, потому что вы нарушаете SOLID.

Другие вопросы по теме