最近測試在測試的時候發現項目在返回的時候偶現崩潰現象,經過抓日子發現是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加載圖片。其實對於開源框架在使用中都比較建議大家對其進行二次封裝以滿足我們日後對其更改與維護。哈哈!