Android 使用Glide 报You cannot start a load for a destroyed activity异常

来源:互联网 发布:vimeo软件下载 编辑:程序博客网 时间:2024/04/26 11:55

这里写图片描述


  最近测试在测试的时候发现项目在返回的时候偶现崩溃现象,经过抓日子发现是Glide加载图片时所报的错误,根据错误信息提示意思指Glide在加载的过程中activity被销毁掉了,导致程序崩溃。我们都知道Glide加载机制是与Fragment和Activity生命周期息息相关,在Glide中,图片的加载会跟随这Activity或者Fragment的生命周期进行相应的加载,停止等操作。
  
  在网上查找相关资料发现基本都是在出现此错误时将getApplicationContext()作为Glide参数即可,虽然此方法可行,但这样的话Glide加载会在应用程序被杀死的时候才会停止。这里并不是很推荐这种做法。这里我们可以自己对Glide稍微封装下:
  

public class ImageLoader {    private Activity activity;    private Fragment fragment;    private RequestManager manager;    public ImageLoader(Activity activity) {        this.activity = activity;        manager = Glide.with(activity);    }    public ImageLoader(Fragment fragment) {        this.fragment = fragment;        manager = Glide.with(fragment);    }    /**     * 获取RequestManager对象     * @return     */    public RequestManager getManager() {        return manager;    }    /**     * 加载普通图片     * @param object     * @param error     * @param placeHolder     * @param view     */    public void loadImage(Object object, int error, int placeHolder, ImageView view) {        manager.load(object)                .error(error)                .placeholder(placeHolder)                .into(view);    }    /**     * 加载圆形图片     * @param object     * @param error     * @param placeHolder     * @param view     */    public void loadCircularImage(Object object,int error,int placeHolder, ImageView view) {        manager.load(object)                .error(error)                .placeholder(placeHolder)                .transform(new GlideCircleTransform(MyApp.getContext()))                .into(view);    }}

  
  这里我们可以通过先获取RequestManager对象再进行图片的加载:
  

//实例化  获取RequestManager ImageLoader imageLoader = new ImageLoader(this);//调用方法加载图片imageLoader.loadImage(url,error,placeHolder,imageView);//将需要使用到的地方  进行调用 例如:MyAdapter adapter = new Myadapter(imageLoader);//适配器中使用.......

  这样就可以很好的避免上述出现的问题,而且还便于我们管理Glide加载图片。其实对于开源框架在使用中都比较建议大家对其进行二次封装以满足我们日后对其更改与维护。哈哈!

阅读全文
1 0