`

大图片预防oom

 
阅读更多
package cn.hugo.android.scanner.common;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class BitmapUtils {

   public static Bitmap decodeSampledBitmapFromResource(Resources res,
         int resId, int reqWidth, int reqHeight) {

      // First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth,
reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
      return BitmapFactory.decodeResource(res, resId, options);
}

   public static int calculateInSampleSize(BitmapFactory.Options options,
         int reqWidth, int reqHeight) {
      // Raw height and width of image
final int height = options.outHeight;
      final int width = options.outWidth;
      int inSampleSize = 1;
      if (height > reqHeight || width > reqWidth) {

         // Calculate ratios of height and width to requested height and
         // width
final int heightRatio = Math.round((float) height
               / (float) reqHeight);
         final int widthRatio = Math.round((float) width / (float) reqWidth);
// Choose the smallest ratio as inSampleSize value, this will
         // guarantee
         // a final image with both dimensions larger than or equal to the
         // requested height and width.
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}

      return inSampleSize;
}

   public static Bitmap getCompressedBitmap(String path) {
      BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
options.inSampleSize = calculateInSampleSize(options, 480, 800);
options.inJustDecodeBounds = false;
      return BitmapFactory.decodeFile(path, options);
}
}

 

分享到:
评论

相关推荐

    android解决OOM

    在Android开发中,"OOM"(Out of Memory)是一个常见的问题,它指的是应用程序在...以上就是解决Android OOM的一些关键知识点,通过合理运用这些策略,开发者可以有效地减少和预防OOM问题,提升应用的性能和稳定性。

    安卓开发-图片下载以及内存处理防OOM.zip

    通过上述方法,开发者可以有效地处理安卓应用中的图片下载和内存管理,预防OOM问题,提升应用的性能和稳定性。在实际开发中,要根据项目的特性和需求选择合适的策略和技术,以达到最佳的优化效果。

    Android图片缓存管理(管理SDK卡例子)

    大尺寸的图片会消耗大量内存,可能导致OOM(Out Of Memory)异常。因此,在加载图片前,应根据显示区域的大小对图片进行裁剪和缩放,减少内存占用。Glide等库都提供了自动调整图片大小的功能。 对于...

    图片异步加载高效缓存

    本知识点主要围绕如何通过双缓存策略来优化图片加载,预防内存溢出(OOM)问题,以及提高图片展示的流畅度和清晰度。 首先,异步加载是一种避免阻塞主线程,提升用户体验的技术。在Android中,我们通常使用...

    转载:Android实现异步加载图片 ListView

    异步加载和使用合适的图片库可以有效预防。 9. **缓存策略**: 图片加载库通常具有智能缓存机制,将图片存储在内存和磁盘中,下次加载时可以从缓存中快速获取,减少网络请求。 10. **网络请求**: 使用异步加载图片...

    android 子线程URL加载网络图片

    - 自定义图片加载库时,需考虑线程池管理、内存泄漏预防、异步加载策略等问题。 8. **内存管理**: - 图片加载过程中要注意内存管理,防止OOM(Out Of Memory)异常。合理使用软引用和弱引用,以及根据屏幕尺寸和...

    面试性能优化.pdf

    #### Bitmap大图处理与OOM预防 对于大尺寸的图片加载,为了避免出现内存溢出(OOM)问题,可以采取以下措施: 1. **采样加载**:利用BitmapFactory.Options的`inSampleSize`参数对图片进行采样,从而减小图片的尺寸...

    BitmapLoaderDemo

    在Android开发中,处理大尺寸的图片时,如果不恰当的加载,可能会导致应用程序崩溃。BitmapLoader就是解决这一问题的工具,它通过优化位图的加载过程,确保应用的稳定性和性能。 BitmapLoader的核心功能包括: 1. ...

    Android应用源码之防止内存溢出浅析-IT计算机-毕业设计.zip

    4. 大图片加载:未经处理的高清大图会消耗大量内存,应使用Bitmap的缩放功能或库如Glide、Picasso来优化。 5. 内存泄漏:非静态内部类持有外部类引用,可能导致外部类无法被垃圾回收。 三、防止内存溢出策略 1. ...

    深入探索Android内存优化1

    优化内存的目标在于防止应用出现Out of Memory (OOM)错误,降低由于内存过大导致应用被Low Memory Killer (LMK)机制杀死的风险,减少由于不合理内存使用引发的垃圾收集(GC)次数,进而避免应用卡顿。同时,优化内存...

    Android--memory.rar_android_mobile android

    5. 对大对象进行合理的缓存和复用:例如,Bitmap可以使用LruCache进行缓存,避免一次性加载过多图片导致内存压力过大。 6. 及时释放资源:例如,关闭数据库连接、释放网络连接、停止服务等。 四、内存监控与优化 1...

    Android应用源码之防止内存溢出浅析.zip

    - Bitmap处理:合理设置Bitmap的大小,使用decodeStream或decodeResource等方法加载,避免一次性加载过大图片。 - 使用Android提供的LruCache或其他内存缓存策略,合理管理缓存对象。 - 注意Activity生命周期,...

    安卓Android源码——防止内存溢出浅析.zip

    - 控制Bitmap使用:使用BitmapFactory.Options来控制解码时的大小,避免加载过大图片导致内存溢出。 - 适当使用内存缓存:例如LruCache,它可以限制缓存大小,防止过度消耗内存。 - 使用异步操作:对于耗时操作,...

    基于Android防止内存溢出浅析

    使用Bitmap时,应尽量减小图片尺寸,使用inSampleSize属性加载合适的大小,避免一次性加载完整张大图。同时,使用BitmapFactory.Options的inPurgeable和inInputShareable参数可以优化内存使用。 **内存缓存策略** ...

    ViewpPager实现引导页

    - **处理内存溢出**:内存溢出(OOM)是Android开发中常见的问题,尤其在处理大量图片时。可以通过以下方式预防: - 使用高效的图片加载库,如Glide或Picasso,它们能自动处理内存缓存和解码策略。 - 缩放图片到...

    Android防止内存溢出浅析.zip

    在Android应用开发中,内存溢出(Out Of Memory,简称OOM)是一个常见的问题,它会导致应用崩溃,严重影响用户体验。理解并防止Android应用中的内存溢出是优化应用性能的关键环节。以下是对Android防止内存溢出的...

    Android内存溢出及内存泄漏原因进行

    2. **数据量过大**:如果程序加载的数据量远超设备内存的承载能力,也可能引发OOM。 3. **集合类未清空引用**:如ArrayList、HashMap等集合类,如果在使用后未清除不再需要的对象引用,这些对象将无法被垃圾收集器...

    阿里巴巴Android开发手册

    手册指导开发者如何有效管理内存消耗,避免因Bitmap过大导致的OOM,以及如何创建流畅的动画效果。 **八、安全** 安全章节涉及敏感信息保护、网络通信安全、权限管理等多个方面,提醒开发者在编写代码时应考虑的安全...

    Android、Java 面试突破专题(无参考答案).docx

    13. **OOM(Out Of Memory)**:内存不足,优化图片加载、使用软引用、及时释放资源等方法可预防。 14. **Service与Activity通信**:通过Binder、意图(Intent)、Messenger、AIDL等方式。 15. **Android版本API差异...

Global site tag (gtag.js) - Google Analytics