반응형
애플리케이션 컨텍스트와 함께 글라이드 이미지 로딩
응용 프로그램 컨텍스트로 이미지를로드하는 충돌을 피하기 위해 내 안드로이드 앱에서 이미지로드에 글라이드를 사용하고 있습니다. 이것이 애플리케이션과 메모리의 성능에 미치는 영향은 무엇입니까?
이것이 애플리케이션과 메모리의 성능에 미치는 영향은 무엇입니까?
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
반응형
'development' 카테고리의 다른 글
사용자 지정 속성 (json.net)을 통해 직렬화에서 속성 제외 (0) | 2020.12.27 |
---|---|
NavigationViewController 신속한 ViewController 제공 (0) | 2020.12.27 |
Gson :지도를 직렬화하는 더 쉬운 방법이 있습니까? (0) | 2020.12.27 |
AVCaptureVideoPreviewLayer 방향-가로 방향 필요 (0) | 2020.12.27 |
performFetchWithCompletionHandler가 실행되지 않습니다. (0) | 2020.12.27 |