java-复制位图到位会泄漏内存吗?

java-复制位图到位会泄漏内存吗?,第1张

概述我很好奇以下代码是否会泄漏…data=getBitmapdataFromCameraCallback();/hisisimmutable,so...//makeamutablecopy...originalUserPhoto=BitmapFactory.decodeByteArray(data,0,data.length).copy(Config.ARGB_8888,true);Matrixmatrix=ne

我很好奇以下代码是否会泄漏…

    data = getBitmapdataFromCameraCallback();//this is immutable, so...    //make a mutable copy...    originalUserPhoto = BitmapFactory.decodeByteArray(data, 0, data.length).copy(Config.ARGB_8888, true);    Matrix matrix = new Matrix();    // -1 doesn't reverse it for some oddball reason, so, we get REALLY close to -1    matrix.preScale(-0.999f, 1.0f);//don't ask don't tell     originalUserPhoto = Bitmap.createBitmap(originalUserPhoto, 0, 0,          originalUserPhoto.getWIDth(), originalUserPhoto.getHeight(),              matrix, true);

如果我就地修改了originalUserPhoto(请注意,我将其作为createBitmap的源传递进来),那会不会泄漏原始数据?还是JVM足够聪明以释放那里的数据?

解决方法:

是的,没有.您有两个Bitmap对象(第一个是由cryptoByteArray创建的,第二个是由createBitmap创建的),而第一个没有任何引用它的对象,因此在将来的垃圾回收周期中,它很可能会被删除.

就是说,虽然在回收位图时也会删除位图的本机后备存储,但我建议您在使用完后手动删除第一个位图-将其保留在单独的引用中并在其上调用recycle() .位图可能非常昂贵.

顺便说一句,如果createBitmap的要点只是按比例缩放,那么我会考虑通过传递选项对原始位图进行解码时将其按比例缩小.您将无法缩放到所需的大小,但是至少您最终不会得到一个庞大的位图,并且只能缩小到其大小的十分之一.这样会更快,并避免内存高峰.

总结

以上是内存溢出为你收集整理的java-复制位图到位会泄漏内存吗?全部内容,希望文章能够帮你解决java-复制位图到位会泄漏内存吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1072458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存