gpt4 book ai didi

android - 到 bitmap.recycle(),或不到 bitmap.recycle()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:14 27 4
gpt4 key购买 nike

几天前,我们在 Play 商店发布了一个应用程序,它处理高质量的位图并且完全是关于编辑它们。

当我们意识到 20% 的设备出现内存不足错误时,一切进展顺利。所以我们检查了我们的代码,发现 Android 没有释放用于在某些设备上存储位图数据的 native 内存。在这种情况下,我们欢迎回收命令。

内存错误消失了(至少在高清设备中)。不管怎样,我们很开心。但是今天我们开始看到 50% 的设备开始出现另一个错误:“无法复制回收的位图”

我们很沮丧。在我们代码中的两行 bitmap.copy() 中,一半的设备无法同步执行这两行:

Bitmap anotherBitmap = bitmap.copy( bitmap.getConfig(), true );
bitmap.recycle();

因此我们删除了回收并发布了另一个更新,决定限制设备屏幕尺寸,因此小屏幕不会给我们差评。

这是我的问题。为什么有些设备可以在回收前复制,而一半不能?

我阅读了 Google 的位图相关文档,并且已经知道位图如何存储在 vm 堆和 native 堆上,垃圾收集如何处理内存不足错误等。Google 提供的加载和编辑大型位图的示例代码几乎相同作为我们的。

阅读了很多博客、谷歌群组线程、github 代码示例...我认为我仍然需要一本关于 Android 位图的好文档/书籍。

PS:我们已经在解码位图时使用 inSampleSize 来缩放位图。

编辑——以下是崩溃报告中的一些数据:

所有设备都是非root的。在大多数情况下,使用的内存在 25% 到 35% 之间。

Manufacturers: 
57% LG
31% Samsung
10% Casper Via V5 (Turkey based company, sells rebranded Chinese phones)

Devices:
81% LG D855 (G3)
18% LG D802TR (G2)
----
66% Samsung SM N910C (Galaxy Note 4)
20% Samsung SM A700F (Galaxy A7)

Operating Systems:
68% Android 5
31% Android 4

OS 5 Details
69% Android 5.0
30% Android 5.0.1

OS4 Details
66% Android 4.4.2
33% Android 4.4.4

最佳答案

你真的确定出于某种原因吗

位图.copy(..)

没有被调用两次?

即:

//first call Bitmap anotherBitmap = bitmap.copy( bitmap.getConfig(), true ); bitmap.recycle();

[...]

// second call Bitmap anotherBitmap = bitmap.copy( bitmap.getConfig(), true ); bitmap.recycle();

关于android - 到 bitmap.recycle(),或不到 bitmap.recycle(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com