首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到bitmap.recycle(),或者不转到bitmap.recycle()

到bitmap.recycle(),或者不转到bitmap.recycle()
EN

Stack Overflow用户
提问于 2015-08-20 19:13:32
回答 1查看 1K关注 0票数 10

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

当我们意识到20%的设备出现内存错误时,一切都进行得很顺利。因此,我们检查了代码,发现Android并没有释放用于在某些设备上存储位图数据的本地内存。在这种情况下,我们欢迎循环命令。

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

我们都很沮丧。在我们的代码中的两行bitmap.copy()上,一半的设备不能在同步中执行这两行操作:

代码语言:javascript
复制
Bitmap anotherBitmap = bitmap.copy( bitmap.getConfig(), true );
bitmap.recycle();

因此,我们删除了回收和发布另一个更新,决定限制设备屏幕的大小,所以小的不会给我们一个坏的评级。

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

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

阅读了很多博客,谷歌组线程,github代码样本.我想我还需要一本关于Android位图的好文档/书。

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

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

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-09-03 12:38:52

你真的确定是因为某种原因

Bitmap.copy(.)

不是叫了两次吗?

即:

//first call Bitmap anotherBitmap = bitmap.copy( bitmap.getConfig(),true );bitmap.recycle() ..。 //第二次调用Bitmap anotherBitmap = bitmap.copy( bitmap.getConfig(),true );bitmap.recycle();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32126497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档