在做画报之类的图片显示app是 往往需要显示一张很大的图片, 这时候老是会发生OOM error,但是压缩大了又会让图片看起来很失真, 这时候需要使用
图片压缩和下面的方法解决。
引用
Android堆内存也可自己定义大小
对于一些大型Android项目或游戏来说在算法处理上没有问题外,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了上次Android开发网提到的 优化Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软件的对内存大小,我们使用Dalvik提供的 dalvik.system.VMRuntime类来设置最小堆内存为例:
Java代码
private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;
VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //设置最小heap内存为6MB大小。
当然对于内存吃紧来说还可以通过手动干涉GC去处理,我们将在下次提到具体应用。
优化Dalvik虚拟机的堆内存分配
对于Android平台来说,其托管层使用的Dalvik JavaVM从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,使用 dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。当然具体原理我们可以参考开源工程,这里我们仅说下使用方法:
Java代码
private final static floatTARGET_HEAP_UTILIZATION = 0.75f;
在程序onCreate时就可以调用
Java代码
VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);
即可。
分享到:
相关推荐
- **设置堆内存使用目标**:通过`VMRuntime.getRuntime().setTargetHeapUtilization(float newTarget)`方法,可以设置理想的堆内存利用率,使虚拟机在GC时调整堆大小,以保持内存利用率接近设定值。 - **监控内存...
- Android系统为每个应用程序分配了一定量的内存,不同版本的Android系统分配的内存大小不同。 - 当应用占用的内存超过分配的阈值时,就会触发垃圾回收(Garbage Collection, GC),回收不再使用的对象以释放内存...
LeakCanary会在后台运行,当检测到内存泄漏时,会提供详细的泄漏信息,包括泄漏对象、泄漏路径以及泄漏的大小,帮助开发者快速定位问题。 除了工具辅助,我们还需要理解常见的内存泄漏场景。例如,注册监听器未及时...
MAT(Memory Analyzer Tool)是由Eclipse基金会开发的一款强大的Java堆内存分析工具,虽然在Android Studio中内置了内存分析功能,但若需要更深入的内存泄漏检测和性能优化,MAT提供了更为专业的解决方案。...
- **过度绘制**:当多个View重叠或者频繁绘制时,系统会消耗大量内存进行渲染。 - **资源未关闭**:如数据库连接、文件流、网络连接等未及时关闭,会占用内存。 3. **防止内存溢出策略** - **优化位图处理**:...
在这些指标中,USS是最有用的指标之一,因为它反映了仅由当前进程独占使用的内存大小。当进程被终止时,USS所表示的内存将被完整回收。因此,在监测内存泄漏问题时,通常会重点关注USS值的变化趋势。 #### 五、...
综上所述,解决Android图片下载导致的内存溢出问题需要从多个方面进行优化,包括图片尺寸控制、缓存策略、内存管理、加载策略等。结合使用现有的图片加载库,可以显著提高应用性能和用户体验。在实际项目中,...
- **Bitmap对象不再使用时调用recycle()**:Bitmap对象通常占用大量内存,当不再需要时应调用recycle()方法释放内存。 - **释放对象引用**:及时释放不再使用的对象引用,有助于垃圾回收机制及时回收内存。 - **...
在Android中,通过Zygote进程预先加载了大量应用共用的类和资源,从而使得应用启动时能够快速地复制Zygote进程内存,节省资源。此外,对象池的使用也是一种循环利用内存的方法。通过对象池可以将已经创建的对象存储...
在Android平台上,显示大型GIF图像可能会导致内存溢出(Memory Overflow)问题,因为GIF是一种动画格式,它包含多帧连续的图像,如果直接加载到内存中,会占用大量资源。为了解决这个问题,我们可以采用一些技术策略...
在Android开发中,防止内存溢出是一个至关重要的任务,因为Android设备的内存资源相对有限,尤其是在Dalvik虚拟机中,其最大堆大小通常只有16MB。本文将深入探讨Android平台上的内存管理机制,以及如何避免内存泄露...
堆的大小由系统根据设备的可用内存动态调整,但开发者可以通过设置`android:largeHeap="true"`在manifest.xml中请求更大的内存空间。然而,这并不意味着应该滥用,因为更大的堆会增加应用启动时间和内存碎片化。 ...
3. **懒加载与动态回收**: 对于大量图像的场景,可以实现懒加载机制,只在需要显示时加载图像,并在不使用时将其回收。 ### 异常处理与内存管理 在解码Bitmap时,应该使用try-catch块来捕获可能的OutOfMemoryError...
首先,Android应用的内存限制相对较低,尤其是Dalvik虚拟机,最大堆大小通常为16MB。这要求开发者谨慎管理内存,避免无谓的内存消耗。Java和Android的内存机制在很大程度上相似,都是基于垃圾回收(Garbage ...
在Android开发中,ListView是展示大量数据常用的组件,但如果不进行优化,很容易引发内存溢出和界面卡顿问题,特别是当列表中包含大图时。本文将深入探讨如何对ListView进行内存优化,确保10M级别的图片加载时,应用...
在Android应用中,Gallery(画廊)组件被广泛用于展示和浏览图片,但由于图片文件通常较大,特别是高清图片,当用户需要浏览大量图片时,容易导致内存溢出,严重影响用户体验和应用稳定性。 #### Android应用架构与...
可以通过设置堆内存大小和优化 Dalvik 虚拟机的堆内存分配来避免内存溢出问题。但是,这种方法需要注意项目 build target 不能高于 2.2 版本。 解决 Android 中的内存溢出问题需要从多方面入手,包括优化图片加载、...
这些数据对于开发者来说非常有用,可以快速识别哪些应用或进程正在消耗大量内存。 在运行 `mem.exe` 后,你可能会看到类似于以下内容的输出: ``` Total Memory: 2GB Free Memory: 512MB Used Memory: 1.4GB App ...
- Dalvik/ART运行时内存结构,包括堆内存(Heap)和栈内存(Stack)。 - 进程和线程的内存占用。 2. **内存泄漏检测**: - 使用工具如MAT (Memory Analyzer Tool)、LeakCanary等进行内存泄漏分析。 - 检测长...