我在我的Android应用程序中使用滑动来加载图像,以避免任何崩溃我正在使用应用程序上下文加载图像。这会对应用程序和内存的性能产生什么影响?
这会对应用程序和内存的性能产生什么影响?
Glide提供了许多.with()
方法,原因如下:它遵循生命周期。
想象一下动态添加到Activity的Fragment
。在它的onCreateView
方法中,它启动了3MB图像的Glide加载。现在,如果用户按下后退按钮并删除片段或整个活动已关闭,该怎么办?
with(getActivity().getApplicationContext())
什么都不会发生,所有3MB的数据都被下载然后被解码,缓存,甚至可能被设置为ImageView,然后被垃圾收集,因为它的唯一引用来自Glide内部。with((Fragment)this)
Glide订阅Fragment的生命周期事件,并且一旦Fragment停止,应暂停任何未完成的请求;当销毁时,所有待处理的请求都将被清除。这意味着图像下载将在中途停止,并且该死片段将不再使用更多资源。with(getActivity())
Glide订阅Activity的生命周期事件,同样的事情发生在上面,但只有当Activity被停止或销毁时。因此,最佳做法是使用最接近的可能上下文/片段来避免未使用的请求完成! (还有一种手动方式来阻止负载:Glide.clear(ImageView|Target)
。)
要在实践中应用它,尽可能尝试使用with(this)
,但是当它不是,如在适配器或集中式图像加载方法中,传入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));