zoukankan      html  css  js  c++  java
  • Android高效加载大图、多图解决方案,有效避免程序OOM

    前言:Android手机分配给给个应用的内存空间都是有限的,当图片像素>屏幕像素时,会造成内存浪费,严重时更会造成oom,当图片像素<屏幕像素时,又会导致展示出来的图片失真,因此一个好的图片框架应该解决内存分配的问题。

    一般做法:

    public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
            int reqWidth, int reqHeight) {
        // 第一次解析将inJustDecodeBounds设置为true,来获取图片大小
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(res, resId, options);
        // 调用上面定义的方法计算inSampleSize值
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
        // 使用获取到的inSampleSize值再次解析图片
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeResource(res, resId, options);
    }

    1.先将BitmapFactory.option.inJustDecodeBounds = true,这样只会加载图片的宽高等信息,并不会将图片加载进内存。

    2.根据imageview控件的大小和图片大小计算出比例关系inSampleSize,并设置给options.inSample

    3.将options.inJustDecodeBounds = false,再重新加载图片,这下加载的图片就是压缩之后的图片。

    还有一种情况,在listview或者gridview中加载大量图片时,都会去访问网络,这样也是会影响性能的,因此使用LruCache(最近最少使用原则)可以把一些重要的图片资源加载到内存中(LinkedHashMap),可以解决重复访问网络的问题。

  • 相关阅读:
    hdu--1045--Fire Net,NYOJ--587--dfs--blockhouses
    NYOJ--1100--WAJUEJI which home strong!
    NYOJ--927--dfs--The partial sum problem
    NYOJ--1058--dfs--部分和问题
    NYOJ--491--dfs(打表水过)--幸运三角形
    素数环:NYOJ--488--dfs||hdu-1016-Prime Ring Problem
    NYOJ--353--bfs+优先队列--3D dungeon
    NYOJ--325--深度优先搜索--zb的生日
    NYOJ--284--广搜+优先队列--坦克大战
    搭建虚拟环境
  • 原文地址:https://www.cnblogs.com/sharkchao/p/10276676.html
Copyright © 2011-2022 走看看