Android加载图片小结
应用中用到图片加载需要解决的问题
无网络环境下图片不可用
- 图片的本地缓存,或者默认预加载的图片
低配置机型,加载图像资源超内存(OutOfMemory, OoM)
- 需要合理使用内存,尤其是bitmap的使用,是内存溢出的最常见地方
ListView, GridView等控件
- 初始化或者移动过程中,列表项的重复绘制导致图片重复加载多次
- 列表快速滑动后,停止区域图像没有被快速加载
快速滑动过程中,在getView中进行图像加载逻辑,在随后view被复用于加载另外的不同的图片 前一个加载应该立即被取消,保证新的加载应该很快被执行 * 往前或往后滑动之后,反向滑动,之前已浏览过区域,等待图片重新加载
在逆向滑动后,之前的图像应该立刻被加载 * 快速滑动过程中,列表卡顿
快速滑动过程中,频繁的图像的加载,创建和释放,可能导致内存回收
缓存使用, 配额管理
- 缓存图像(Bitmap)于内存,命中缓存的图像可立刻加载,但限于zygoate虚拟机内存有限
- 过大的内存占用,容易造成OoM
- 占用用户过多内存,造成用户反感
- 缓存文件于sd卡或者机身存储,配额管理
- 应该适度使用用户机器资源
- 应用卸载后,不应该有遗留数据
- 缓存图像(Bitmap)于内存,命中缓存的图像可立刻加载,但限于zygoate虚拟机内存有限
图片复用
- 比如用户头像,120x120图像下载到本地之后,如有80x80的需求, 无需再次下载,直接复用120x120图片
图片的尺寸的适配
- 如无特殊指定,可根据ImageView尺寸适配最合适尺寸的图
- 大部分的图片存储服务,支持通过拼接不同url获得不同尺寸,不同质量, 不同格式(
webp)的图片
需要根据不同的尺寸需求,拼接不同的url,这样成本太高,不会有各个尺寸的图片,需要自己处理常用尺寸的图片适配不同尺寸
- 各图片存储拼接格式不同,此为具体的业务逻辑,应该有足够好的扩展性,支持不同的拼接方式
其中一个解决方案:http://cube-sdk.liaohuqiu.net/
小结转自:http://www.liaohuqiu.net/cn/index/page2/
Android加载图片小结的更多相关文章
- android 加载图片oom若干方案小结
本文根据网上提供的一些技术方案加上自己实际开发中遇到的情况小结. 众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视手机而定).一般我们可以通过获取当 ...
- 图片--Android加载图片导致内存溢出(Out of Memory异常)
Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...
- Android加载图片OOM错误解决方式
前几天做项目的时候,甲方要求是PAD (SAMSUNG P600 10.1寸 2560*1600)的PAD上显示高分辨率的大图片. SQLITE採用BOLD方式存储图片,这个存取过程就不说了哈,网上一 ...
- Android加载图片的策略
实现图片缓存也不难,需要有相应的cache策略.这里我采用 内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且 ...
- android 加载图片框架--Glide使用详解
一.简介 Glide,一个被google所推荐的图片加载库,作者是bumptech.这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app.(PS:众所 ...
- Android加载图片导致内存溢出(Out of Memory异常)
Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...
- android 加载图片防止内存溢出
图片资源: private int fore[]; private int back[]; fore = new int[]{R.drawable.a0, R.drawable.a1, R.drawa ...
- 解决android加载图片时内存溢出问题
尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过jav ...
- android 加载图片圆角等功能的处理
以Glide为例: Glide.with(getContext()).load(item.getSoftLogo()).transform(this.glideRoundTransform).into ...
随机推荐
- ADO.NET DataSet、DataTable、DataRow、DataView的学习
对于一个datatable中的数据进行嵌套查询判断某几列数据是否相同从而确定这条数据是否一样,并确定他重复的次数COUNT1字段. 例如: DataTable dt = new DataTable() ...
- uva 10366 Faucet Flow
题意: 给出l和r,然后从l坐标到r坐标每隔两个位置有一个档板,给出挡板的高度,然后想(-1, 1)中间加水,问什么时候会溢出. 分析: 两边先找到距离(-1,1)最近的最大值L和R.接着比较两个L和 ...
- linux 中ls命令函数
#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<dirent.h> ...
- linux 系统中的特殊文件
特殊文件是UNIX系统中最具特色的文件特性之一.特殊文件也称设备文件.提供用户访问外部设备,而不必知道各种设备的具体操作.UNIX利用特殊文件作为用户与设备文件的接口,使用户能像访问普通文件那样访问特 ...
- "Classifying plankton with deep neural networks" notes
cross entropy loss is not quite the same as optimizing classification accuracy. Althougth the two ar ...
- 鼠标聚焦到Text输入框时,按回车键刷新页面原因及解决方法
前提 一个form中只有一个输入框,当输入框获取焦点后,点击回车,导致整个页面都刷新,问题解决办法. 1.处理form 在form中添加事件 <form onsubmit="retu ...
- Git 详细命令集
初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件: 第二步,使用命令git ...
- python 网络编程第一版
--version 1.0 只完成server/client 之间的通信. 1.server端的代码: #!/usr/bin/python #!coding:utf-8 from socket imp ...
- 未能加载文件 %CommonDir%\dte90a.olb。未能找到该文件,因此解决此问题的尝试失败
分类: 日常应用问题 2012-08-04 10:53 914人阅读 评论(0) 收藏 举报 microsoft2010c vs2010 启动时提示 ------------------------- ...
- 进程占用百分百CPU不卡(从未试过,当别的程序运行的时候,当前程序还会运行吗?)
在写程序中.为了让程序效率高.有时会点用很高的CPU.这里用户体验不好可以设置线程的优先级来搞定. BOOL SetThreadPriority( HANDLE hThread, // handle ...