Android 关于在适配器中延迟加载位图的共识(重点是Bitmap.recycle())
我看到很多关于这方面的建议,但没有一个(我发现的)考虑到所有因素,这些因素包括:Android 关于在适配器中延迟加载位图的共识(重点是Bitmap.recycle()),android,bitmap,lazy-loading,adapter,recycle,Android,Bitmap,Lazy Loading,Adapter,Recycle,我看到很多关于这方面的建议,但没有一个(我发现的)考虑到所有因素,这些因素包括: 异步下载,不复制(下载程序和位图),取消下载/分配不会复制的图像 无论如何都需要更长的时间 一个适配器可以有多个相同ID的视图(对getView(0)的调用非常频繁) 不能保证视图不会丢失而不会被回收(考虑列表/网格视图的大小调整或文本过滤) 视图和数据/逻辑的分离(尽可能多) 没有为每次下载启动一个单独的线程(UI速度明显减慢)。使用队列/堆栈(LinkedBlockingQueue?)和线程池,或 诸如此类。。
这些要求对我来说似乎是合理的,但每一项都增加了难度,尤其是Bitmap.recycle,它需要在操作期间和活动销毁时调用(请注意,onDestroy,甚至onStop都可能不被调用)。
这也排除了对软引用的依赖,因为软引用本可以解决其他一些问题。
是的,这是必要的,否则即使在try-catch中进行了任意数量的gc、睡眠(20秒,偶数)、产量和巨大的数组分配(以强制控制内存不足的情况),我也会从内存错误中解脱出来。
搜索“OutOfMemoryError:位图大小超过VM预算”或“android位图回收”。
是的,我正在对位图进行重新采样。您能描述一下您希望在代码中实现什么吗?@alex我想要实现的是一个通用抽象适配器,它可以在任何ListView或GridView中使用,只需很少的更改,比如实现创建entryview的方法,下载位图并返回要更新的ImageView。例如,我希望添加ExpandableList方法很容易,因为在设计适配器时做出了一些假设,所以不需要修改映像管理。我不是要求为我编码适配器,只是为了一种如#5所述管理位图的机制,我们的异步dl机制实现“滥用”了
AsyncTask
类,它利用了已经可用的内部线程池,将图像作为进度更新发回&在活动请求之前不会退出。对于2+来说效果很好。仅供参考,“关闭为”-在异步的许多部分解决方案的上下文中,这一点很清楚。下载已经存在,但我想问题应该是独立的。澄清和澄清。很遗憾这个问题已经结束了。我不同意这不是一个真正的问题。这些仍然是问题,如果能将解决方案整合到一个地方,那就太好了。我不同意凯文的观点。