内存溢出的主要导致原因有如下几类:
可以发现,无论哪种类型,导致内存溢出(OutOfMemoryError)的核心原因就是应用的内存超过阈值了。
我们有时也遇到,第一反应是去分析OOM异常打印栈,可是后来发现打印栈打印的地方没有啥问题,没有可优化的余地了,于是就郁闷了。其实这时候你留心观察几个现象即可,如下:
- 留意你执行触发OOM操作前的界面是否有卡顿或者比较密集的GC打印;
- 使用命令查看下当前应用占用内存情况;
确认了以上这些现象你基本可以断定该OOM的log真的没用,真正导致问题的原因是内存泄露,所以我们应该按照上节介绍的方式去着手排查内存泄露问题,解决掉内存泄露后红色空间都能得到释放,再去显示一张0.8M的优化图片就不会再报OOM异常了。
如下给出一些我们应用开发中的常用的策略建议:
-
时刻记得不要加载过大的Bitmap对象;譬如对于类似图片加载我们要通过BitmapFactory.Options设置图片的一些采样比率和复用等,具体做法点我参考官方文档,不过过我们一般都用fresco或Glide开源库进行加载。
-
优化界面交互过程中频繁的内存使用;譬如在列表等操作中只加载可见区域的Bitmap、滑动时不加载、停止滑动后再开始加载。
-
有些地方避免使用强引用,替换为弱引用等操作。
-
避免各种内存泄露的存在导致OOM。
-
对批量加载等操作进行缓存设计,譬如列表图片显示,Adapter的convertView缓存等。
-
尽可能的复用资源;譬如系统本身有很多字符串、颜色、图片、动画、样式以及简单布局等资源可供我们直接使用,我们自己也要尽量复用style等资源达到节约内存。
-
对于有缓存等存在的应用尽量实现onLowMemory()和onTrimMemory()方法。
-
尽量使用线程池替代多线程操作,这样可以节约内存及CPU占用率。
-
尽量管理好自己的Service、Thread等后台的生命周期,不要浪费内存占用。
-
尽可能的不要使用依赖注入,中看不中用。
-
尽量在做一些大内存分配等可疑内存操作时进行try catch操作,避免不必要的应用闪退。
-
尽量的优化自己的代码,减少冗余,进行编译打包等优化对齐处理,避免类加载时浪费内存。
可以发现,上面只是列出了我们开发中常见的导致OOM异常的一些规避原则,还有很多相信还没有列出来,大家可以自行追加参考即可。
转载于:https://my.oschina.net/u/3637221/blog/1512200
分享到:
相关推荐
本篇文章将深入探讨Android内存管理的两个核心概念:堆(Heap)和栈(Stack),以及如何理解和解决Android内存溢出问题。 1. 堆与栈 堆和栈是Java虚拟机(JVM)中的两种主要内存区域,它们各自具有特定的用途和...
在Android开发中,内存管理是至关重要的,尤其是处理图片资源时,经常遇到内存溢出(Out Of Memory,简称OOM)的问题。本项目提供了一个在Android 1.6 SDK环境下编写的工具类,旨在帮助开发者有效地避免内存溢出,...
在Android开发中,图片的加载和内存管理是一个关键问题,特别是考虑到防止因内存溢出(Out Of Memory,简称OOM)而导致应用崩溃。本教程将详细探讨如何在Android中有效地进行图片下载和内存处理,以避免OOM的发生。 ...
在Android应用开发中,内存溢出(Out Of Memory,简称OOM)是一个常见的问题,它会导致应用崩溃,严重影响用户体验。理解并防止Android应用中的内存溢出是优化应用性能的关键环节。以下是对Android防止内存溢出的...
在Android开发中,图片下载和显示是常见的操作,但如果不恰当处理,很容易引发内存溢出(Out of Memory,简称OOM)问题。内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,导致程序崩溃。对于Android应用...
通过上述方法,开发者可以在保持应用性能的同时,有效地处理`Bitmap`内存溢出问题,避免应用崩溃,提升用户体验。在实际开发中,根据具体需求灵活调整`inSampleSize`和`inJustDecodeBounds`的使用,以及合理地进行...
### 针对Android应用中Gallery内存溢出的解决方案 #### 引言 随着移动互联网的飞速发展,Android作为全球最受欢迎的智能手机平台之一,以其开放性和灵活性吸引了大量的开发者和用户。然而,随着应用程序功能的日益...
在Android开发中,图片加载是常见且关键的操作,但如果不恰当处理,很容易导致内存溢出(Out of Memory,简称OOM)问题。内存溢出不仅会影响应用的性能,降低用户体验,严重时甚至会导致应用崩溃。本篇文章将深入...
在Android应用开发中,图片加载是一项关键任务,尤其是在处理大量图片时,如果不妥善处理,很容易导致内存溢出(OOM)问题。"图片异步加载插件"正是一款为解决这个问题而设计的工具,它能够有效地优化内存管理,提高...
本文将详细探讨几种解决Android内存溢出的方法。 首先,针对图像导致的内存溢出,一种常见的解决方案是使用`BitmapFactory.Options`类进行图片解码时的尺寸控制。例如,在创建`Bitmap`对象时,可以设置`...
在Android开发中,处理大量的图片资源时,常常会遇到内存溢出(Out Of Memory,简称OOM)的问题。这是因为Android系统为每个应用分配的内存有限,当加载过多或过大的图片时,很容易超出这个限制,导致应用崩溃。为了...
在Android开发中,内存管理是至关重要的一个环节,因为不当的内存使用可能导致应用程序崩溃或性能下降,最常见的问题就是内存溢出(Out Of Memory,简称OOM)。本文将深入浅析如何在Android环境中预防和处理内存溢出...
内存溢出(Out Of Memory, OOM)和内存泄漏是两个常见的问题,它们可能导致应用崩溃、性能下降甚至用户体验恶化。下面我们将详细探讨这两个问题的原因以及相应的解决方案。 内存溢出(OOM)通常发生在应用程序请求...
在Android编程中,内存溢出(Out Of ...总之,Android内存管理是一个复杂的过程,理解引用类型和内存管理机制是避免OOM的关键。通过实例和实践,开发者可以更好地理解和应对内存溢出问题,提高应用的稳定性和性能。
"处理android bitmap oom 2.0版本关闭了硬件加速"这一主题,关注的是如何在Android 2.0版本及其后续版本中避免Bitmap导致的内存溢出,以及硬件加速在这个过程中的角色。 首先,理解硬件加速的概念至关重要。在...
#### 一、Android内存管理机制概述 在Android中,每个应用都有自己的独立进程,并且每个进程的内存都是相互隔离的。Android操作系统为每个进程分配了最大可用内存,即所谓的“Dalvik Heap Size”,默认大小通常为16...
综上所述,这个优化版的Android图片瀑布流解决方案综合运用了多种技术手段,以防止内存溢出,提升应用的稳定性和性能。开发者在实现自己的瀑布流布局时,可以参考这些优化策略,为用户提供流畅且高效的图片浏览体验...
内存溢出(Out of Memory,简称OOM)是Android开发者经常面临的问题,它可能导致应用崩溃或者性能下降。本资料"Android应用源码之防止内存溢出浅析"正是针对这一问题提供了解决方案。下面,我们将深入探讨Android...
然而,如果不妥善处理,这种大量加载图片的方式可能会导致内存溢出(Out Of Memory,简称OOM),使应用崩溃。本篇文章将深入探讨如何使用LRUCache来解决Android图片墙中的OOM问题。 一、Android OOM简介 当应用程序...