博客
关于我
Android Bitmap操作问题之Canvas: trying to use a recycled bitmap
阅读量:447 次
发布时间:2019-03-06

本文共 834 字,大约阅读时间需要 2 分钟。

Bitmap.recycle 方法被弃用

在Android系统中,Bitmap的存储分为两部分:一部分是Bitmap的数据,另一部分是Bitmap的引用。在Android 2.3之前,Bitmap的引用存放在堆中,而数据部分则存放在栈中。因此,开发者需要主动调用Bitmap.recycle()方法来释放内存。然而,随着Android 2.3及之后版本的更新,情况有所变化。

在Android 2.3之后,Bitmap的数据和引用都存放在堆中。这意味着不再需要手动调用recycle()方法,系统会将不再使用的Bitmap内存交给垃圾回收机制(GC)来处理。因此,recycle()方法被废弃了。

注:系统建议不要手动调用recycle()方法,而是让GC自动处理不再使用的Bitmap。然而,实际使用中发现,直接调用recycle()可能会引发错误,错误信息提示:“Canvas: trying to use a recycled bitmap android.graphics.Bitmap@1a50ff6b”。

这可能是由于在调用recycle()后,再次使用同一个Bitmap对象而引起的。根据Android系统源码的一段注释:“新生成的Bitmap可能与源Bitmap对象相同,也可能已经生成了新的副本。”因此,仍有可能创建同一个对象,导致错误。

问题分析与解决方法

从错误日志可以看出,调用recycle()后,Bitmap的某些方法又被调用了。这可能是因为在调用recycle()后,仍然使用了同一个Bitmap对象。然而,根据系统的注释,新生成的Bitmap可能与源Bitmap对象相同,也可能已经生成了新的副本。因此,仍有可能存在这种情况。

对于不需要兼容Android 2.3及之前版本的情况,建议直接避免使用recycle()方法,让GC自动回收Bitmap内存。这样可以避免因手动调用recycle()而引发的问题,同时也能提高内存管理的效率。

转载地址:http://gidfz.baihongyu.com/

你可能感兴趣的文章
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
Nim教程【十二】
查看>>
Nim游戏
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO基于UDP协议的网络编程
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>