编程语言
首页 > 编程语言> > android – 使用应用程序上下文加载Glide图像

android – 使用应用程序上下文加载Glide图像

作者:互联网

我在我的Android应用程序中使用滑动来加载图像,以避免任何崩溃我正在使用应用程序上下文加载图像.这会对应用程序和内存的性能产生什么影响?

解决方法:

What will be effect of this on performance of application and memory?

Glide提供了许多.with()方法,原因如下:它遵循生命周期.

想象一下动态添加到Activity的片段.在其onCreateView方法中,它启动了3MB图像的Glide加载.现在,如果用户按下后退按钮并删除片段或整个活动已关闭,该怎么办?

>如果你使用(getActivity().getApplicationContext())什么都不会发生,所有3MB的数据都被下载然后被解码,缓存,甚至可能被设置为ImageView,然后被垃圾收集,因为它的唯一引用是来自Glide internals.
>如果你使用((Fragment)this)Glide订阅Fragment的生命周期事件,一旦Fragment停止,任何未完成的请求应该暂停;当销毁时,所有待处理的请求都将被清除.这意味着图像下载将在中途停止,并且该死片段将不再使用更多资源.
>如果你使用(getActivity())Glide订阅Activity的生命周期事件,同样的事情发生在上面,但只有当Activity被停止或销毁时.

因此,最佳做法是使用最接近的可能上下文/片段来避免未使用的请求完成! (还有一种手动停止加载的方法:Glide.clear(ImageView | Target).)

要在实践中应用它,尽可能尝试使用(this),但是当它不是,如在适配器或集中式图像加载方法中,传递RequestManager滑动作为参数并使用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));

标签:android-glide,android,performance
来源: https://codeday.me/bug/20190925/1817118.html