development

애플리케이션 컨텍스트와 함께 글라이드 이미지 로딩

big-blog 2020. 12. 27. 20:39
반응형

애플리케이션 컨텍스트와 함께 글라이드 이미지 로딩


응용 프로그램 컨텍스트로 이미지를로드하는 충돌을 피하기 위해 내 안드로이드 앱에서 이미지로드에 글라이드를 사용하고 있습니다. 이것이 애플리케이션과 메모리의 성능에 미치는 영향은 무엇입니까?


이것이 애플리케이션과 메모리의 성능에 미치는 영향은 무엇입니까?

Glide는 .with()수명주기를 따른다는 이유로 많은 방법을 제공합니다 .

Fragment활동에 동적으로 추가되는 a 상상해보십시오 . onCreateView방법 에서는 3MB 이미지의 글라이드로드를 시작합니다. 이제 사용자가 뒤로 버튼을 누르고 조각이 제거되거나 전체 활동이 닫히면 어떻게 될까요?

  • with(getActivity().getApplicationContext())아무것도 사용 하지 않으면 모든 3MB의 데이터가 다운로드되고 디코딩되고 캐시되며 아마도 ImageView로 설정되어 가비지 수집됩니다.
  • with((Fragment)this)Glide 를 사용 하는 경우 Fragment의 수명주기 이벤트를 구독하고 Fragment가 중지되는 즉시 미해결 요청을 일시 중지해야합니다. 삭제되면 보류중인 모든 요청이 지워집니다. 즉, 이미지 다운로드가 중간에 중지되고 해당 죽은 조각에서 더 이상 리소스를 사용하지 않습니다.
  • with(getActivity())Glide 를 사용 하는 경우 활동의 라이프 사이클 이벤트를 구독하고 위와 동일한 일이 발생하지만 활동이 중지되거나 소멸 될 때만 발생합니다.

따라서 가장 좋은 방법은 사용되지 않는 요청 완료를 방지하기 위해 가능한 가장 가까운 컨텍스트 / 조각을 사용하는 것입니다! (로드를 중지하는 수동 방법도 있습니다 : Glide.clear(ImageView|Target).)


이를 실제로 적용하려면 with(this)가능한 경우 사용하려고 하지만 어댑터 나 중앙 집중식 이미지로드 방법처럼 그렇지 않은 경우에는 a RequestManager glide를 인수로 전달 하고을 사용 glide.load(...합니다. 예를 들면 다음과 같습니다.

static loadImage(RequestManager glide, String url, ImageView view) {
    glide.load(url).into(view);
}

또는 어댑터 :

class MyAdapter extends WhichEveryOneYouUse {
    private final RequestManager glide;
    MyAdapter(RequestManager glide, ...) {
        this.glide = glide;
        ...
    }
    void getView/onBindViewHolder(... int position) {
        // ... holder magic, and get current item for position
        glide.load... or even loadImage(glide, item.url, holder.image);
    }
}

Activity / Fragment에서 다음을 사용하십시오.

loadImage(Glide.with(this), url, findViewById(R.id.image));
// or
list.setAdapter(new MyAdapter(Glide.with(this), data));

참조 URL : https://stackoverflow.com/questions/31964737/glide-image-loading-with-application-context

반응형