emr*_*duz 10 android bitmap recycle
几天前,我们在Play商店发布了一个应用程序,它处理高质量的位图,并且都是关于编辑它们的.
当我们意识到20%的设备出现内存错误时,一切进展顺利.所以我们检查了我们的代码,发现Android没有发布用于在某些设备上存储位图数据的本机内存.在这种情况下,我们欢迎recycle命令.
内存错误消失了(至少在高清设备中).无论如何,我们很高兴.但今天我们开始看到50%的设备开始出现另一个错误:"无法复制回收的位图"
我们很沮丧.在我们代码中的两个bitmap.copy()行中,有一半的设备无法在同步中执行这两行:
Bitmap anotherBitmap = bitmap.copy( bitmap.getConfig(), true );
bitmap.recycle();
Run Code Online (Sandbox Code Playgroud)
所以我们删除了回收并发布了另一个更新,决定限制设备屏幕大小,所以小的不会给我们一个糟糕的评级.
这是我的问题.为什么有些设备可以在回收前复制,有一半不能?
我阅读了Google的位图相关文档,并且已经知道如何在vm的堆和本机堆上存储位图,垃圾收集如何处理内存不足错误等.Google提供的用于加载和编辑大位图的示例代码几乎与我们的相同.
阅读了很多博客,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
Run Code Online (Sandbox Code Playgroud)
你真的确定由于某种原因
位图.复制(..)
不是叫了两次吗?
IE:
//首先调用Bitmap anotherBitmap = bitmap.copy( bitmap.getConfig(), true ); 位图.recycle();
[...]
// 第二次调用 Bitmap anotherBitmap = bitmap.copy( bitmap.getConfig(), true ); 位图.recycle();
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |