关于OutOfMemoryError问题解决的相关思考

很多的时候,我们使用Bitmap不会出现多大的问题。但是当机器资源不够的情况下,很多应用都会报出
OutOfMemoryError,当然报出这样的异常往往是给Bitmap分配内存时内存不足引起的。即便是很小的一个图片,也会有出错,如何解决呢?关于更多Android相关的问题推荐学习《Android应用开发》系列视频教程。

我的解决办法如下:

[java]
view plaincopy

public
static Bitmap createBitmap(int width, int height, Bitmap.Config config) {

Bitmap
bitmap = null;

try {

bitmap =
Bitmap.createBitmap(width, height, config);

} catch
(OutOfMemoryError e) {

while(bitmap ==
null) {

System.gc();

System.runFinalization();

bitmap =
createBitmap(width, height, config);

}

}

}

经过最近不断的实验证明,当内存泄漏很大的时候,上述方法根本无法避免内存溢出。其实避免内存溢出还是要靠平时写代码的时候自己去注意。很多时候的溢出主要是因为Bitmap和Drawable资源没被释放造成的,尤其是当项目中图片资源很多的时候,这个问题尤为突出。

解决办法:当CreateBitmap之后,当这个Bitmap用完之后,那需要recycle这个资源。

还有当需要更换图片的背景资源的时候需要使用到Drawable,当需要更换那个
Drawable时,原来的Drawable需要setCallback(null)来使Activity对原来的资源解除引用,从而使资源得到释放。
Java的内存管理不像C++一般,但是也有它的灵活之处,只要仔细想想,还是可以将内存管理好的。

如果你有更好的解决办法,可以一起在e良师益友讨论哦,大家一起进步。

时间: 2024-11-01 09:19:08

关于OutOfMemoryError问题解决的相关思考的相关文章

钢条切割问题求解方法及相关思考

钢条切割问题求解方法及相关思考 题目来源于<算法导论>第15章第一节.问题如下: 给定一个长度为n英寸的钢条和一个价格表pi(i=1,2,3,...n),求能够使销售收益rn最大的切割方案. 问题1:一共有多少种切割方式? 思路一:对于一个长度为n英寸的钢条,其中一共有n-1个节点可供切割,在每一个节点处都可以选择切割或者不切割,将对一根钢条的切割过程视为从第一个节点直到第n-1个节点逐一选择切割或者不切割的一个过程,利用乘法原理,可以算出来总共有2n-1种切割方案.以四个节点的钢条为例: 思

中国计算机考试区别及求职的相关思考

全国计算机技术与软件专业技术资格(水平)考试或称"软件考试",简称"软考". 全国计算机等级考试或称"等级考试",简称"等考". 经常听到有学生询问:软考难不难?等考好不好通过?合格率是多少等等之类的问题.还有的学生干脆在网上发帖子"我到底该不该考软考"?也有回帖的说:等考.软考都差不多,那些辅导教材告诉你哪里是重点,哪里要背,在工作中没多大用.这些都表现出考生对学业负担之外的学习任务的关注和困惑,还有误解

角色职责及技术需求相关思考

本人担任团队敏捷开发中的SM即Scrum Master,字面意思是敏捷专家或者敏捷大师,即熟悉敏捷开发模式及敏捷实施流程的人员,因涉及到工作量评估和分派等工作,所以需要有较强的技术能力. Scrum Master是团队的导师和组织者,与Product Owner紧密合作,及时为团队成员提供帮助.促使team按照scrum方式运行,为Scrum过程负责的人.Scrum Master并非团队的领导(因为团队是自我组织的),而是一个负责屏蔽外界对开发团队干扰的角色. Scrum Master是规则的执

关于基线的相关思考。什么是基线?为什么要建立基线?

是已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它.建立基线的三大原因是:重现性.可追踪性和报告. 重现性是指及时返回并重新生成软件系统给定发布版的能力,或者是在项目中的早些时候重新生成开发环境的能力.可追踪性建立项目工件之间的前后继承关系.其目的在于确保设计满足要求.代码实施设计以及用正确代码编译可执行文件.报告来源于一个基线内容同另一个基线内容的比较.基线比较有助于调试并生成发布说明. 建立基线后,需要标注所有组成构件和基线,以便能

函数的相关思考

为什么需要函数: 1.避免重复性操作 2.有利于程序的模块化 什么是函数: 逻辑上:能够完成特点功能的代码块 物理上:能够接收数据[也可以不接收数据] 能够对接收的数据进行处理 能够将数据处理的结果返回[也可以不返回任何值] 总结: 函数是个工具,他是为了解决大量类似问题而设计的,相当于一个黑匣子 如何定义一个函数: 函数返回值类型     函数名(形式参数) { 函数执行体 } 1.函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法 2.return 表达式,  含义 3.函数返

浮点与整形在GUI下的相关思考

平时不接触绘图,似乎感觉不到浮点和整形所带来的区别,这次项目中意外的碰到了浮点与整形进行迁移的工作.因此写点心得,让自己以后也可以看看. 用浮点作图有个最大的弊端就是边界情况,比如你需要在点(20,20)的地方画一根直线,但由于是浮点,此时你不一定真的能到(20,20),你可能在横坐标或者纵坐标下只能到19.784类似的小数,而到不了真正的20.因为再一加,可能都已经抄20了,你的碰撞检测就已经报警了.因此,解决此类浮点边界情况的方法是建立跳跃机制--即当系统检测到此时你的offset出现了一个

NSOperationQueue队列依赖相关思考

添加依赖后,队列中网络请求任务有依赖关系时,任务结束判定以数据返回为准还是以发起请求为准? waitUntilFinished方法容易误解. 依赖关系 // // ViewController.m // OperationTest0108 // // Created by LongMa on 2020/1/8. // #import "ViewController.h" #import <AFNetworking/AFNetworking.h> @interface Vie

chapter 2 - 导言 - 像经济学家一样思考

前言: 每个领域都有自己的语言和思考方式,学习这个领域的相关思考方法比我们在该领域中使用其他的领域的思考方式要来的好,虽然那可能有时给你带来灵感. 经济学的思考方式: 与其他学科一样,经济学家通常这样讨论他们的主题:先提出理论,再收集数据,然后分析数据,以努力证明或否定他们的理论. 科学方法:观察.理论和进一步观察 理论通常与观察密不分可,没有详细的观察思考哪有理论?而通过观察.理论再观察.理论这样的循环,能使你的理论更接近与真相,能够降低你验证该理论所需的成本. 对于收集数据的方法,在经济学的

面对缓存,有哪些问题需要思考?

缓存可以说是无处不在,比如 PC 电脑中的内存.CPU 中的二级缓存.HTTP 协议中的缓存控制.CDN 加速技术都是使用了缓存的思想来解决性能问题. 缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹. 本文主要是讨论我们经常使用的分布式缓存 Redis 在开发过程中的相关思考. 1. 如何将业务逻辑与缓存之间进行解耦? 大部分情况,大家都是把缓存操作和业务逻辑之间的代码交织在一起的,比如(代码一): 从上面的代码可以看出以下几个问题: 缓存操作非常繁琐,产生非常多的重复代码: 缓存操作与