OOM问题
hero0812 opened this issue · 32 comments
GPreviewBuilder.from((Activity) itemView.getContext())
.setData(thumList)
.setCurrentIndex(selectPosition)
.setSingleFling(true)
.setType(GPreviewBuilder.IndicatorType.Number)
.start();
当 thumList 中有很多图片url时,左右切换查看图片,app占用内存持续增长不被释放,直到OOM
你的列表有多少,预览退出清除缓存的处理。,你可以回调处理
列表有100个左右,Loader的代码如下:
public class TestImageLoader implements IZoomMediaLoader {
@Override
public void displayImage(@NonNull Fragment context, @NonNull String path, @NonNull final MySimpleTarget<Bitmap> simpleTarget) {
Glide.with(context)
.load(path)
.asBitmap()
.fitCenter()
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.skipMemoryCache(false)
.error(R.drawable.bbyl_logo)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
simpleTarget.onResourceReady(resource);
}
@Override
public void onLoadStarted(Drawable placeholder) {
super.onLoadStarted(placeholder);
simpleTarget.onLoadStarted();
}
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
simpleTarget.onLoadFailed(errorDrawable);
}
});
}
@Override
public void onStop(@NonNull View photoView, @NonNull Fragment context) {
Glide.with(context).onStop();
}
@Override
public void clearMemory(@NonNull Context c) {
Glide.get(c).clearMemory();
}
}
好的,考虑在数据多情况下,进行适当释放。尽快新版本
辛苦同学了,向你学习~
版本1.1.1
觉得可以 star 就是最大支持了🤣😊😊😊😊😊
Glide.with(this).load(mUrl).skipMemoryCache(true) ) 使用吧, 你图片够大,看来我的
、List换为List会不会好一些???
欢迎你参与代码改进啦
主要有Fragment的 List
啊写错了。。 List ---> List 因为看到另一个图片选择库是这样的。
2、我尝试在IZoomMediaLoader onStop()中拿到photoView并且调用 Glide.clear(View phtotoView)的方法,清理缓存,但是爆出了You must not call setTag() on a view Glide is targeting 错误,看来是因为加载图片时,我们为imageview设置了tag的原因
imageview设置了tag 设置哦 好啦。我找到解决方法 主要viewPager有缓存我的List 滑动的时候,不释放。所以一直增加 加这个 viewPager.setOffscreenPageLimit(4); 就行了。 设置viewPager 缓存模式
你先调试一下,看看有效果么
这个肯定不行的,setOffscreenPageLimit()方法默认缓存数是1,小明效果回收是啥意思?
我是内部类的做的, 改成了setOffscreenPageLimit()列表的长度了 你可以试一下
setOffscreenPageLimit(3)推荐哦 不要设置哦setOffscreenPageLimit(list .size())。 @hero0812
MyGlideModule 这个类还有Manifest中
不设置的话会有什么问题吗?
MyGlideModule 类 自定义的glide 策略哦 缓存路径设置, 图片缓存显示方式,。没有的化话,默认是策略配置
你那边有用100,200张图片,切换查看,试一试吗?看看会不会有和我这一样的OOM问题,说不定是我本地的代码逻辑问题
这个我这么图片哦。你方便图片链接?我40 50的 不够😢
退出预览只能实在 列表显示图片做的 才有复位的效果。 列表没有显示返回,有一个默认左上的动画
我们加个QQ吧,把问题解决方案对应到个 github上来就行了。。这样研究问题好费劲啊1031772600
加了。
我才15张图片就挂了,返回点击退出,任何一张都不会挂,左右滑动就挂了。
求救,搞了一天,没解决。。。
E/PriorityExecutor: Request threw uncaught throwable
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Failed to allocate a 25958412 byte allocation with 4194208 free bytes and 13MB until OOM
at java.util.concurrent.FutureTask.report(FutureTask.java:93)
at java.util.concurrent.FutureTask.get(FutureTask.java:163)
at com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor.afterExecute(FifoPriorityThreadPoolExecutor.java:96)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1120)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
at com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor$DefaultThreadFactory$1.run(FifoPriorityThreadPoolExecutor.java:118)
Caused by: java.lang.OutOfMemoryError: Failed to allocate a 25958412 byte allocation with 4194208 free bytes and 13MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:686)
请glide加载时 设置缩放处理 本框架本身不对图片不会处理。