various places建议使用Android BitmapFactory.Options.inPurgeable
作为避免Android 2.x及更早版本(Android 3.1 fixes this)中的OutOfMemory异常的方法。
如果inPurgeable
如此之大,为什么我不想使用它?关于此选项正在做什么的详细信息,documentation似乎非常清楚:
如果将其设置为true,则生成的位图将分配其像素,以便在系统需要回收内存时可以清除它们。在这种情况下,当需要再次访问像素时(例如,绘制位图,调用getPixels()),它们将被自动重新解码
看起来很棒。有什么收获?
答案 0 :(得分:9)
documentation随后已更新,其中包含解决原始问题的其他信息。
摘要:不再推荐使用此标志。
答案 1 :(得分:4)
如果您正在从文件系统读取位图,则使用此标志将强制Android保持文件打开(至少在4.0.4中)以便能够重新读取它。读取超过1024个文件后,您将达到打开文件的限制并获得“打开文件太多”错误。
您可以使用来自有根终端的lsof
命令观察行为,并查看所有已打开的文件。
答案 2 :(得分:2)
此标志目前完全被忽略,这就是捕获。
@slodge更新:请任何阅读此内容并将其视为正确答案的人也阅读评论 - “此标志目前完全被忽略”仅在某些情况下是正确的 - 在其他情况下(例如使用时{{ 1}}关于下载的数据)然后这个标志不被忽略,非常非常有用
答案 3 :(得分:1)
要进行重新解码,位图必须能够访问编码数据,方法是共享对输入的引用或复制它。
如果您无法再访问编码数据,那么这可能是个问题吗?如果您正在从流式ByteArray实时解码位图并且您的应用程序决定回收内存,那会不会导致您的Bitmap丢失这些像素,该怎么办?