如何在Android应用当中避免内存溢出问题

ahyq167
2013-10-12 · TA获得超过3831个赞
知道小有建树答主
回答量:999
采纳率:0%
帮助的人:2340万
展开全部
一、内存溢出 现在的智能手机内存已经足够大,但是对于一个应用程序来说智能手机当中稀缺的内存,仍然是应用程序的一大限制。在Android应用程序开发当中,最常见的内存溢出问题(OOM)是在加载图片时出现的,尤其是在不知道图片大小的情况下。 潜在的内存溢出操作主要包括以下几点: 1、从网络当中加载用户特定的图片。因为直到我们在下载图片的时候我们才知道图片的大小。 2、向Gallery加载图片。因为现在智能手机的摄像头有很高的分辨率,在加载图片的时候需要最图片进行处理,然后才能正常的使用。 请注意一点,Android系统是从系统全局的观念来分配内存以加载图片的,这就意味着,即使你的应用有足够大的内存可用,内存溢出问题(out of memroy,OOM)仍然可能出现,因为所有的应用共享一个加载图片的内存池(我们使用BitmapFactory进行解析)。 二、解决内存溢出问题 原文(Downsampling为了好理解,解释为,程序A)。程序A通过调整像素,同时使其均衡化来降低图片的分辨率。因为不管问题图片是因为太大而不能再手机上正常显现,这个图片都会缩短其宽度以在ImageView当中显示,当图片在ImageView当中显示时,我们会因为加载一些没有必要的原始图片而浪费掉内存。 因此,更加有效的加载图片的时机是在其初始化处理的时候。 以下是处理代码: 1: private static Bitmap getResizedImage(String path, byte[] data, int targetWidth){2:3: BitmapFactory.Options options = new BitmapFactory.Options(); 14: options.inSampleSize = ssize;15:16: Bitmap bm = null;17: try{18: bm = decode(path, data, options); 19: }catch(OutOfMemoryError e){ 39: result = result * 2;40:41: }42:43: return result;44: }三、AQuery当在Android应用程序开发当中使用AQuery组件时,处理这个问题会变的更加的简单。
微测检测5.10
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇... 点击进入详情页
本回答由微测检测5.10提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式