看bug:
- 使用onTrimMemory() 或者 onLowMemory() 清理内存
private void memoryClean() {
ComponentCallbacks2 componentCallbacks2 = new ComponentCallbacks2() {
@Override
public void onTrimMemory(int level) {
if (level==TRIM_MEMORY_UI_HIDDEN)
Glide.get(getContext()).clearMemory();
Glide.get(getContext()).trimMemory(level);
LoggerUtil.d("onTrimMemory"+String.valueOf(level));
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
}
@Override
public void onLowMemory() {
ForumFragment.super.onLowMemory();
Glide.get(getContext()).clearMemory();
LoggerUtil.d("onLowMemory");
}
};
getContext().registerComponentCallbacks(componentCallbacks2);
- 尽量减少图片资源的大小
Glide.with(context)
.asDrawable()
.load(url))
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.apply(MyUtils.gildeOptions())
.into(imageView);
public static RequestOptions gildeOptions(){
RequestOptions options = new RequestOptions();
options.fitCenter() .placeholder(R.drawable.default_head) .error(R.drawable.default_head) .fallback(R.drawable.default_head).override(200,200);
return options;
}
/*
(1)skipMemoryCache(true)表示跳过内存缓存,这里应该是关键设置;
(2)diskCacheStrategy(DiskCacheStrategy.ALL)全部使用磁盘缓存;
(3)override(200,200)重新指定加载图片的尺寸。
*/
- 在Recyclerview中重写这个方法,当item被隐藏的时候,调用Glide.with(fragment).clear(imageView);
@Override
public void onViewRecycled(@NonNull ViewHolder holder) {
super.onViewRecycled(holder);
ImageView imageView=holder.imageView;
if (imageView!=null){
Glide.with(context).clear(imageView);
}
}