Android加载图片小结

应用中用到图片加载需要解决的问题

  1. 无网络环境下图片不可用

    • 图片的本地缓存,或者默认预加载的图片
  2. 低配置机型,加载图像资源超内存(OutOfMemory, OoM)
    • 需要合理使用内存,尤其是bitmap的使用,是内存溢出的最常见地方
  3. ListView, GridView等控件
    • 初始化或者移动过程中,列表项的重复绘制导致图片重复加载多次
    • 列表快速滑动后,停止区域图像没有被快速加载

    快速滑动过程中,在getView中进行图像加载逻辑,在随后view被复用于加载另外的不同的图片 前一个加载应该立即被取消,保证新的加载应该很快被执行 * 往前或往后滑动之后,反向滑动,之前已浏览过区域,等待图片重新加载

    在逆向滑动后,之前的图像应该立刻被加载 * 快速滑动过程中,列表卡顿

    快速滑动过程中,频繁的图像的加载,创建和释放,可能导致内存回收

  4. 缓存使用, 配额管理
    • 缓存图像(Bitmap)于内存,命中缓存的图像可立刻加载,但限于zygoate虚拟机内存有限

      • 过大的内存占用,容易造成OoM
      • 占用用户过多内存,造成用户反感
    • 缓存文件于sd卡或者机身存储,配额管理
      • 应该适度使用用户机器资源
      • 应用卸载后,不应该有遗留数据
  5. 图片复用
    • 比如用户头像,120x120图像下载到本地之后,如有80x80的需求, 无需再次下载,直接复用120x120图片
  1. 图片的尺寸的适配
    • 如无特殊指定,可根据ImageView尺寸适配最合适尺寸的图
    • 大部分的图片存储服务,支持通过拼接不同url获得不同尺寸,不同质量, 不同格式(webp)的图片

    需要根据不同的尺寸需求,拼接不同的url,这样成本太高,不会有各个尺寸的图片,需要自己处理常用尺寸的图片适配不同尺寸

  2. 各图片存储拼接格式不同,此为具体的业务逻辑,应该有足够好的扩展性,支持不同的拼接方式

其中一个解决方案:http://cube-sdk.liaohuqiu.net/

 

小结转自:http://www.liaohuqiu.net/cn/index/page2/

时间: 2024-09-30 17:06:43

Android加载图片小结的相关文章

Android加载图片内存溢出问题解决方法

  这篇文章主要介绍了Android加载图片内存溢出问题解决方法,本文讲解使用BitmapFactory.Options解决内存溢出问题,需要的朋友可以参考下 1. 在Android软件开发过程中,图片处理是经常遇到的. 在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API提供了BitmapFactory.Options这个类. 2. 由于Android对图片使用内存有限制,若是加载几兆的大图片便内存溢出.Bi

版本控制-android加载图片的时候图片控件是黑色的

问题描述 android加载图片的时候图片控件是黑色的 我使用我自己写的ImageView进行加载图片,报出cannot generate texture from bitmap的错误,而且图片控件是黑色的,百度搜了,说是因为设置图片的非硬件加速模式是在api11之后添加的,要进行版本控制,我进行控制了,程序直接停止了,我想问问是不是我写得ImageView有问题?下面是我的ImageView类: public class Imageview extends ImageView implemen

android 加载图片轻松避免OOM(out of memory)

在使用android加载图片的时候,经常会出现内存溢出,主要是由于android可使用的内存太小,而通过代码加载进来的图片,并不会被GC回收,于是我写了一个工具类用来加载图片,并且建立缓存,轻松避免内存溢出,废话不多说,上代码 [java] view plaincopy package l.test1.util;      import java.io.File;   import java.io.FileInputStream;   import java.io.FileNotFoundExc

android 加载图片oom若干方案小结

本文根据网上提供的一些技术方案加上自己实际开发中遇到的情况小结. 众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视手机而定).一般我们可以通过获取当前线程的可运行内存来判断,比如系统分给当前运行内存只有16M,而你的图片就有16M,这肯定会oom的. 相关知识介绍 1.颜色模型 常见的颜色模型有RGB.YUV.CMYK等,在大多数图像API中采用的都是RGB模型,Android也是如此:另外,在Android中还有包含透明度Alpha的颜色模型

Android加载图片内存溢出问题解决方法_Android

1. 在Android软件开发过程中,图片处理是经常遇到的. 在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API提供了BitmapFactory.Options这个类. 2. 由于Android对图片使用内存有限制,若是加载几兆的大图片便内存溢出.Bitmap会将图片的所有像素(即长x宽)加载到内存中,如果图片分辨率过大,会直接导致内存OOM,只有在BitmapFactory加载图片时使用BitmapFact

android 加载图片轻松避免OOM(out of memory) 支持设置缓存大小,不再强制catch OOM

http://blog.csdn.net/liaoxingliao/article/details/7168500 package l.test1.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import android.graphics

Android开发之加载图片的方法_Android

本文实例讲述了Android开发之加载图片的方法.分享给大家供大家参考.具体分析如下: 加载网络上的图片需要在manifest中配置访问网络的权限,如下: <uses-permission android:name="android.permission.INTERNET" /> 如果不配置这个权限的话,会报错:unknown host exception. package com.example.loadimgfromweb; import java.io.InputSt

Android使用控件ImageView加载图片的方法_Android

在 Android 加载图片一般使用 ImageView,这里简单记录一下这个控件的使用方法. 最简单就是在 xml 里直接使用 ImageView 标签: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="

Android使用控件ImageView加载图片的方法

在 Android 加载图片一般使用 ImageView,这里简单记录一下这个控件的使用方法. 最简单就是在 xml 里直接使用 ImageView 标签: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="