GlideのassertNotDestroyedクラッシュの原因と対処方法 | Androidアプリ開発

先日、公開しているアプリで以下の
「com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed 」というGlideのクラッシュが多数発生していました。
com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed のエラー
色々と調査をしたところ、その原因と対処方法が分かったので、それをこの記事で紹介します。
スポンサーリンク

原因

このクラッシュの原因はGlideに渡しているActivityオブジェクトがnullないし終了済みの場合に発生します。

具体的には以下のようなコードのActivityオブジェクトです。
Glide.with(activity) //←このactivityオブジェクト
    .load(uri)
    .into(iv);
例えば、別スレッドでGlideを使用している場合で、
Activityが終了しているにもかかわらず、Glideで画像を表示しようとするとクラッシュします。

対処方法

対処方法はonDestoryがコールされたことを判別する変数を導入し、Glideの画像表示を阻止することです。

サンプルコードは以下です。
private boolean isGlideProhibited = false;

@Override
protected void onDestroy() {
    super.onDestroy();

    isGlideProhibited = true;

    //...
}


//別スレッド内
if(!isGlideProhibited) Glide.with(activity)
                           .load(uri)
                           .into(iv);

まとめ

この記事では「com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed 」というGlideのクラッシュの原因と対処方法を紹介しました。
タイトルとURLをコピーしました