Android(安卓)使用Glide 报You cannot start a load for a destroyed activity异常
16lz
2021-01-26
最近测试在测试的时候发现项目在返回的时候偶现崩溃现象,经过抓日子发现是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加载图片。其实对于开源框架在使用中都比较建议大家对其进行二次封装以满足我们日后对其更改与维护。哈哈!
更多相关文章
- Android获取输入法高度——输入法与页面布局无缝切换
- android调用摄像头拍照,从相册中选择照片并裁剪
- Android新手入门2016(15)--Gallery画廊
- 仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名,
- MVVM框架的使用介绍和为什么选择用MVVM框架
- Android入门笔记 - 数据存储 - 网络
- Android(安卓)本地文件缓存各个方法获取的路径小结
- Android(安卓)Paging分页库的学习(一)—— 结合本地数据进行分页加
- android 设置Alpha值实现图片渐变效果