首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

android 减少图片出现oom错误

在做Android图片程序的时候,由于图片比较多,很有很的机会出现OOM的机会,根据网上的资料做了些总结,期待能够减少OOM出现的机会。...优化虚拟机的堆内存使用 对于Android平台来说,其托管层使用的Dalvik Java VM从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理...Android堆内存也可自己定义大小  对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感...,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),然后就可以取图片了,这里要注意的是,inSampleSize 可能小于0...2.用BitmapFactory解码一张图片时,有时会遇到该错误。这往往是由于图片过大造成的。要想正常使用,则需要分配更少的内存空间来存储。

80060

android 加载图片oom若干方案小结

一般我们可以通过获取当前线程的可运行内存来判断,比如系统分给当前运行内存只有16M,而你的图片就有16M,这肯定会oom的。...相关知识介绍 1.颜色模型 常见的颜色模型有RGB、YUV、CMYK等,在大多数图像API中采用的都是RGB模型,Android也是如此;另外,在Android中还有包含透明度Alpha的颜色模型...,可以将暂时用不到的Bitmap对象及时回收掉; (5)自定义堆内存分配大小,优化Dalvik虚拟机的堆内存分配;(这里可以参照一些第三方的图片缓存框架) 场景演示 为了说明出现OOM的场景和解决...OOM的方法,我们选取了两款不同的机型来做比较: (1)该应用展示一个gallery,该gallery只加载图片,gallery的adapter中传入图片的路径而不是图片对象本身,adapter动态加载图片...另外gallery每次显示一张图片时,都要重新解析获得一张图片,尽管在Defy上还未曾出错,但当图片量加大,GC回收不及时时,还是有可能出现OOM

72480
您找到你想要的搜索结果了吗?
是的
没有找到

Android OOM案例分析

Android(Java)开发中,基本都会遇到java.lang.OutOfMemoryError(本文简称OOM),这种错误解决起来相对于一般的Exception或者Error都要难一些,主要是由于错误产生的...由于发生OOM时,用户操作路径的不确定性,无法精确复现线上的OOM,因此采取模拟复现的方式,最终发生OOM时的栈信息基本一致即可。...具体方案为: 选取图片资源多且较为复杂的页面,比如美食的POI详情页。 加载30次该页面,为了增加OOM的几率,30个POI页面的ID是不同的。...OOM发生后,使用Android Studio自带的Android Monitor dump出HPROF文件,然后使用SDK中的hprof-conv(位于sdk_root/platform-tools)...for (int i = 0; i < N; i++) { int attr = a.getIndex(i); switch (attr) { case com.android.internal.R.styleable.View_background

1.3K40

为何大厂的图片不会OOM

作者:Like_Codeing 链接:https://juejin.im/post/5ec7302c518825434062f497 图片在移动开发中占据中举足轻重的地位,早期的android 应用页面...Ui相对简单,但随着Android系统不断的升级发展, 界面元素越来越丰富,用户对体验要求越来越高,UI小姐姐们需要设计出精致的界面元素,其中不乏很多好看的图片,但是随着手机性能提升(分辨率,cpu主频...,如果我们应用“毫不吝啬”将这些大图直接加载到内存中,很快内存就会耗尽,最终出现OOM异常,所以图片的处理对于一个稳定、用户体验友好的应用来说非常重要,今天我们就来聊一聊Bitmap,在开发过程中把”图片...assets 中的图片大小 我们知道,Android 中的图片不仅可以保存在 drawable 目录中,还可以保存在 assets 目录下,然后通过 AssetManager 获取图片的输入流。...可以在 Android Studio Profiler 中查看内存情况,多次切换图片后,显示的效果如下: ?

1.1K20

android加载大图,防止oom

高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小。...下面我们就来看一看,如何对一张大图片进行适当的压缩,让它能够以最佳大小显示的同时,还能防止OOM的出现。...其中最核心的类是LruCache (此类在android-support-v4的包中提供) 。...,还是要加载大量图片,都不用担心OOM的问题了!...不过仅仅是理论地介绍不知道大家能不能完全理解,在后面的文章中我会演示如何在实际程序中灵活运用上述技巧来避免程序OOM,感兴趣的朋友请继续阅读 Android照片墙应用实现,再多的图片也不怕崩溃 。

1.3K90

Android | 关于 OOM 的那些事

前言 Android 系统对每个app都会有一个最大的内存限制,如果超出这个限制,就会抛出 OOM,也就是Out Of Memory 。本质上是抛出的一个异常,一般是在内存超出限制之后抛出的。...最为常见的 OOM 就是内存泄露(大量的对象无法被释放)导致的 OOM,或者说是需要的内存大小大于可分配的内存大小,例如加载一张非常大的图片,就可能出现 OOM。...出现 OOM 是应为 Android 系统对虚拟机的 heap 做了限制,当申请的空间超过这个限制时,就会抛出 OOM,这样做的目的是为了让系统能同时让比较多的进程常驻于内存,这样程序启动时就不用每次都重新加载到内存...未设置android:largeHeap="true"的时候,只要申请的内存超过了heapgrowthlimit就会触发oom,而当设置android:largeHeap="true"的时候,只有内存超过了...参考链接 【性能优化】大厂OOM优化和监控方案 深入探索 Android 内存优化 DVM和ART原理初探 Android OOM 问题探究 ....

84420

Bitmap图片压缩,大图加载防止OOM

[在这里插入图片描述] 前言 Android官网中处理位图 和 [高效加载大型位图 ](https://developer.android.com/topic/performance/graphics/...为了防止加载 Bitmap 的时候造成 OOM 崩溃,我们首选要知道: 一张图片加载到 Bitmap 的时候的占用的是怎么内存计算; 占用内存过高的时候怎么进行图片压缩减小内存占用; RGB介绍 RGB...Bitmap压缩 压缩原理 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是下 采样压缩,其二是 质量压缩。...如果对 Android 使用的这两种采样算法效果不满意,必要时可以引入其他的算法。...} catch (IOException e) { e.printStackTrace(); } 这里需要注意的是 mRect 的宽高不能太大,否则加载得到的 Bitmap 的时候也会出现 OOM

2.6K00

Bitmap图片压缩,大图加载防止OOM

在这里插入图片描述 前言 Android官网中处理位图 和 高效加载大型位图 这两篇文章中已经做了很明确指出了如何高效的加载大图。...为了防止加载 Bitmap 的时候造成 OOM 崩溃,我们首选要知道: 一张图片加载到 Bitmap 的时候的占用的是怎么内存计算; 占用内存过高的时候怎么进行图片压缩减小内存占用; RGB介绍 RGB...Bitmap压缩 压缩原理 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是下 采样压缩,其二是 质量压缩。...如果对 Android 使用的这两种采样算法效果不满意,必要时可以引入其他的算法。...} catch (IOException e) { e.printStackTrace(); } 这里需要注意的是 mRect 的宽高不能太大,否则加载得到的 Bitmap 的时候也会出现 OOM

1.9K20

每个人都要学的图片压缩终极奥义,有效解决 Android 程序 OOM

由来 ---- 在我们编写 Android 程序的时候,几乎永远逃避不了图片压缩的难题。...同时我们都知道,Android 系统分配给我们每个应用的内存是有限的,由于解析、加载一张图片,需要占用的内存大小,是远大于图片自身大小的。...所以,这时程序就可能因为占用了过多的内存,从而出现OOM 现象。那么什么是 OOM 呢? OOM 即 OutOfMemory 异常,也就是我们所说的 内存溢出 ,其一般表现为应用闪退等现象。...是因为如果按照原大小去调用相应的 decode...()方法解析图片,会导致内存占有率过高触发OOM 异常,进而导致程序崩溃啊!...这种做法有两个好处: 既能获得图片大小,由于后续操作 又成功避免了去解析图片,导致程序 OOM 而崩溃。 但这恰恰是被很多人所忽略的一点。

32920

Android 自定义 HorizontalScrollView 打造多图片OOM 的横向滑动效果(实例代码)

可以想ViewPager一样,既可以绑定数据集(动态改变图片),还能做到,不管多少图片都不会OOM(ViewPager内部一直初始化,回收,至多只保持3个View)。...OOM。...下面准备进入正题,HorizontalScrollView不管里面多少View都是不会回收的,当达到一定量的时候会发生OOM,下面介绍如何改写HorizontalScollView实现文章开始所说的效果...Map专门存储View和posion的,主要是为了给点击回调提供当前的View的位置,有点类似:Android 自定义 ViewPager 打造千变万化的图片切换效果里面的Map的巧妙用法~~ 是不是完全实现了...如果你的项目中需要用到Gallery类似的效果,果断使用上例尝试吧~~ 源码下载 总结 以上所述是小编给大家介绍的Android 自定义 HorizontalScrollView 打造多图片OOM 的横向滑动效果

1.7K20

Probe:Android线上OOM问题定位组件

OOM原因分析 要定位OOM问题,首先需要弄明白Android中有哪些原因会导致OOMAndroid中导致OOM的原因主要可以划分为以下几个类型: ?...错误,这也是Android中发生OOM的主要原因。...由Runtime.getRuntime.MaxMemory()可以得到Android中每个进程被系统分配的内存上限,当进程占用内存达到这个上限时就会发生OOM,这也是Android中最常见的OOM类型。...堆内存不足 Android中最常见的OOM就是Java堆内存不足,对于堆内存不足导致的OOM问题,发生Crash时的堆栈信息往往只是“压死骆驼的最后一根稻草”,它并不能有效帮助我们准确地定位到问题。...骑手Android端使用Probe组件解决了很多线上的OOM问题,将线上OOM Crash率从最高峰的2‰降低到了现在的0.02‰左右。

1.2K20

Android 创建线程源码与OOM分析》

针对上面两种crash,分析一下Android/Linux中线程的创建过程,以及该OOM出现的原因。 ---- 1....---- PS: 关于Android 的ashmem可以阅读 Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析(http://blog.csdn.net...p=315) Android Kernel Features(https://elinux.org/Android_Kernel_Features#ashmem) ---- 至此,代码片段4就分析完了,...PS:Android的C语言标准库实现是区别于普通GNU/Linux发行版的glic的,因为后者是LGPL协议的,Android重写了一个实现,用的是BSD协议。...结论OOM分析 OK,终于分析完了,看了好多代码。最终得出一个结论,不管是堆栈A,还是堆栈B: 创建线程过程中发生OOM是因为进程内的虚拟内存地址空间耗尽了。

4.4K91

Probe:Android线上OOM问题定位组件

OOM原因分析 要定位OOM问题,首先需要弄明白Android中有哪些原因会导致OOMAndroid中导致OOM的原因主要可以划分为以下几个类型: ?...错误,这也是Android中发生OOM的主要原因。...由Runtime.getRuntime.MaxMemory()可以得到Android中每个进程被系统分配的内存上限,当进程占用内存达到这个上限时就会发生OOM,这也是Android中最常见的OOM类型。...堆内存不足 Android中最常见的OOM就是Java堆内存不足,对于堆内存不足导致的OOM问题,发生Crash时的堆栈信息往往只是“压死骆驼的最后一根稻草”,它并不能有效帮助我们准确地定位到问题。...骑手Android端使用Probe组件解决了很多线上的OOM问题,将线上OOM Crash率从最高峰的2‰降低到了现在的0.02‰左右。

1.2K20

记一次 android 线上 oom 问题

为了解决这个问题,打算用本地 socket (unix domain socket) 代替 tcp socket,因为前者不依赖端口号,只依赖文件路径,而 Android 中的私有存储可以有效的防止文件冲突...问题分析 随着回滚版本的放量,主端 oom 崩溃逐渐回归正常,进一步坐实了新版本存在问题。oom 问题非常不好排查,原因是崩溃时的堆栈与引入 bug 的地方已经相差了十万八千里,不能直接定位问题点。...走查了一遍,没有发现明显的内存泄漏代码: master 是稳定版本,不存在内存泄漏; ios 平台代码通过宏定义作了隔离,对 android 没有影响; 只有一个地方非常可疑——这是一个日志上报操作,只在特定场景下发生...51840000 B < 50 MB,虽然也不小了,但是对于动辙 4~8 GB 的智能手机而言,实在不算什么,要想泄漏 4 GB 得不关机运行将近 82 天,不要说现在没有这样一直不关机的用户,即使有,Android...为何 oom 问题会集中在 0.0.0.1 版本中?

1K40

Android中关于OOM的捕获的方法

前言 做Android开发其实经常会遇到OOM然后程序崩溃的情况,导致这种情况一般来说是内存泄露造成的,捕获内存泄露的工具是leakCanary2还是推荐一下,当然本章并不是说这个的使用方法,程序OOM...时会造成直接崩溃,在使用中会影响用户体验,这里就说一下实现OOM的捕获的方法。...实现效果 捕获OOM 结论 将try catch(e:Exception)改为try catch(e:Throwable)即可实现捕获OOM 为什么改为Throwable后就能捕获OOM了呢?...,可以从它们的父类Throwable中获取,接下来我们改一下代码,将Exception改为Throwable 改完后可以正常打印Throwable的输出结果 Throwable后处理 虽然我们捕获了OOM...所以说捕获OOM只是一个治标的办法,其实最核心的还是要解决内存泄露的问题。 完

71220
领券