当前位置: 代码迷 >> Android >> Android加载一百张大图片,列表显示,怎么保证不会OOM
  详细解决方案

Android加载一百张大图片,列表显示,怎么保证不会OOM

热度:47   发布时间:2016-05-01 13:20:17.0
Android加载一百张大图片,列表显示,如何保证不会OOM?
图片从网络获取,大小都是1024*768的大图,要求滑动展示,如何做到不会OOM?
大牛们有什么好的建议吗?

------解决方案--------------------
显示缩略图吧,那么大的图多吃内存哦。
------解决方案--------------------
判断滑动事件,滑动时不加载图片

及时回收

也只能这样了。。
------解决方案--------------------
只能这样了
------解决方案--------------------
我是来听高见。
------解决方案--------------------
其实没啥高见的,那么大尺寸的图片,到内存里只看分辨率大小,你可以考虑最终设备的RAM在2GB或4GB,一个图片占用率内存 为分辨率的长x宽x4 计算,你就明白了。回收内存用弱引用让JVM管理吧。
------解决方案--------------------
哎。。好久没来论坛了。
这个问题。其实很简单。
3部曲
1:软引用。耗吧,我说这个基本没啥用。就是防止挂掉,还是看不了图片的。
2:我还是放代码。
Java code
public static Bitmap loadImageFromUrl(String url, int sc) {        URL m;        InputStream i = null;        BufferedInputStream bis = null;        ByteArrayOutputStream out = null;        byte isBuffer[] = new byte[1024];        if (url == null)            return null;        try {            m = new URL(url);            i = (InputStream) m.getContent();            bis = new BufferedInputStream(i, 1024 * 4);            out = new ByteArrayOutputStream();            int len = 0;            while ((len = bis.read(isBuffer)) != -1) {                out.write(isBuffer, 0, len);            }            out.close();            bis.close();        } catch (MalformedURLException e1) {            e1.printStackTrace();            return null;        } catch (IOException e) {            e.printStackTrace();        }        if (out == null)            return null;        byte[] data = out.toByteArray();        BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeByteArray(data, 0, data.length, options);        options.inJustDecodeBounds = false;        int be = (int) (options.outHeight / (float) sc);        if (be <= 0) {            be = 1;        } else if (be > 3) {            be = 3;        }        options.inSampleSize = be;        Bitmap bmp = null;        try {            bmp = BitmapFactory.decodeByteArray(data, 0, data.length, options); // 返回缩略图        } catch (OutOfMemoryError e) {            // TODO: handle exception            System.gc();            bmp = null;        }        return bmp;    }
------解决方案--------------------
探讨

哎。。好久没来论坛了。
这个问题。其实很简单。
3部曲
1:软引用。耗吧,我说这个基本没啥用。就是防止挂掉,还是看不了图片的。
2:我还是放代码。
Java code

public static Bitmap loadImageFromUrl(String url, int sc) {
URL m;
InputStream i = null;
……

------解决方案--------------------
是否可以考虑,下载到本地文件系统做缓存的情况。 只是需要定期清理磁盘。
------解决方案--------------------
探讨
是否可以考虑,下载到本地文件系统做缓存的情况。 只是需要定期清理磁盘。

------解决方案--------------------
分页加载,先加载能够显示的界面图,及时回收浏览后不再显示的图片,只能这样了,没有太好的方法了。
------解决方案--------------------
“保证”只能用在静物比较适合,Android的兼容性是一个超大的问题。
  相关解决方案