[Android] Glide:You cannot start a load for a destroyed activity

김개발소발·2022년 2월 15일
0
Glide.with(Activity)
	.load(String)
	. into(View)

이미지 로드 할 때 발생하는 오류 You cannot start a load for a destroyed activity

Glide.with(Activity)의 내부 로직을 보면`getRetrieve(*activity).get(activity*);` 바로 반환하는 한 줄의 코드가 있다.

public static RequestManager with(@NonNull Activity activity) {
  return getRetriever(activity).get(activity);
}

getRetrieve하고 다시 get(Activity) 하는 메소드의 코드를 보면 액티비티의 상태를 확인하는 assertNotDestroyed(acticity); 코드를 볼 수 있다.

private static void assertNotDestroyed(@NonNull Activity activity) {
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed()) {
    throw new IllegalArgumentException("You cannot start a load for a destroyed activity");
  }
}

assertNotDestroyed(Activity) 메소드에서 액티비티가 isFinishing이 아닌 isDestroyed로 액티비티의 상태를 확인하고, destory가 실행된 경우 에러 메세지를 출력하는 것을 알 수 있다.

⇒ 백그라운드 작업 후 Glide를 통해 이미지를 로딩할 경우 Acticity.isFinishing()Acticity.isDestroyed()를 같이 확인해 주는 것이 좋겠다

아니면 생명 주기를 보장할 수 있는 방법으로 사용하는 것이 좋겠다.

profile
사람들 속에 숨어사는 INTJ 성향을 가진 개발자

0개의 댓글