关于图片优化,大概如下

为什么要进行图片优化

相信大概刚开始学习Android的时候有过图片过大而直接报错的情况,下面简单介绍一下OOM问题,Android支持的图片格式及图片优化的几种方式

什么是OOM?:Android系统的进程(APP级别)有最大的内存限制,超过这个限制系统就会抛出)OOM错误
图片OOM问题产生的几种情况
1.一个页面一次加载过多的图片
2.加载大图片没有进行压缩
3.Android列表加载大量bitmap没有使用缓存(第三方框架)

Android支持的图片格式
png:无损压缩的图片格式,支持透明通道,占用的空间一般比较大
Jpeg:有损压缩的图片格式,不支持透明通道
webp:由谷歌2010年发布,支持无损与有损,比较理想
gif:支持多帧动画,但安卓本身图片库不支持,需要用到第三方框架

为了方便理解,还得介绍一下图片占用内存的知识
如何计算:图片宽图片高一个像素占的内存大小

所以由上可见,图片储存优化的方式如下
1.尺寸优化:通过减小宽高来实现
2.质量压缩:改变一个像素占用的内存(优化解码率)
3.内存重用:需要用到inBitmap属性

先从尺寸压缩开始说起
主要起作用的为两个方法
intJustDecodeBounds=true(可以在不加载图片的情况下获得图片的宽高)
inSampleSize(用合适的压缩比)
!!!如果只是单纯的改变ImageView的大小,不会对图片产生任何作用(需要对bitmap进行优化
可能还不是很清楚,所以贴张图

质量压缩
常见的图片格式在设置在UI上之前需要经过解码过程
使用RGB-565代替ARGB-8888可以降低图片占用内存,上面那张图已经有了,如下红色矩形类内
内存重用
InBItmap,后面的图需<=第一张图的大小,下图为第二张图片重用第一张图
mCurrentBitmap为第一张图的Bitmap

然后小提一下Bitmap的内存管理
在3.0前,对于像素数据的支持保存在本地内存中,
在3.0后,像素数据和位图都储存在Dalvik堆中

以上为图片的储存优化,接下来介绍图片加载优化
首先要了解两个资源文件夹
mipmap和drawable,一般情况下,启动图标放在mipmap文件夹,
然后这两个文件夹的区别为setHasMipmap的值
mipmap为true,drawable为false

如何让Android图片资源适配各种分辨率的手机
先了解分辨率和DPI ,分辨率单位为px
1.240-320 xhdpi
2.320-480 xxhdpi !!!主流
3.480-640 xxxhdpi

下面提供两种方案
方案一:为每种dpi都出一套图片资源 (为设计师增加了工作量,且增大了APK大小)
方案二:提供一套需要支持的最大dpi的图片,(自动渲染的概念);

下面介绍一下图片匹配的规则(假设我的手机为480dpi分辨率的手机,我将需要的图片放在xhdpi文件夹下,系统处理如下)
1.先查找xxhdpi文件夹,没有找到,往下走
2.再查找xxxhdpi文件夹,没有找到,往下走
3.再查找nohdpi文件夹,如果还没有找到,才会去xhdpi文件夹

其中有一个问题,一个手机从不同的文件夹下拿图片,显示效果是不同的,如果不是匹配的文件夹,系统会对其图片放大或缩小

常见的图片加载优化方法
1.异步优化:图片放在后台请求(不占用主UI的资源)
2.图片缓存:对于列表中的图片进行缓存(本地文件中的缓存)
3.网络请求:使用OkHttp进行图片请求(优点很多)
4.懒加载:当图片呈现到可视区域再进行加载

其中图片的加载一般用多级缓存加载流程

主要原因如下
如果每次都用网络请求(服务器受不了,且浪费用户流量),需通常使用内存加本地文件两级缓存(如何单纯使用本地文件,不安全,容易被清除掉)。

小提一下超大图片加载方案
使用图片压缩来加载超大图片,会看不清图片细节
使用BitmapRegionDecoder来解决

下面为大家介绍一下几大图片加载的框架
1.Universal ImageLoader,优点如下
多线程,支持下载监听
bitmap裁剪
ListView暂停加载
自由配置
较好的控制图片的加载过程
提供在较慢的网络下对图片进行加载

2.Picasso,特点如下
缓存图片原图到本地
使用ARGB-8888(占用内存比较大)

3.Glide(来自谷歌),特点如下
与Activity/Fragment生命周期一致
改变图片的大小再加载到内存

4.Fresco(来自脸谱),特点如下(重点介绍)
性能好:首次加载图片速度非常快,用户体验好
内存表现出色:有效的对内存块的图片进行了管理(共享内存机制来解决图片加载的oom问题)
渐进式预览:大致展示图片轮廓,然后逐渐展示清晰图片
多图请求 封装了先加载底分辨率图片,然后再显示高分辨率图片
图片呈现效果:自定义占位符,圆角图
Gif,Webp格式
在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。
加载Gif图和WebP动图在任何一个Android开发者眼里看来都是一件非常头疼的事情。每一帧都是一张很大的Bitmap,每一个动画都有很多帧。Fresco让你没有这些烦恼,它处理好每一帧并管理好你的内存。

以上就是大概的内容了,由于博主时间问题,会于以后写关于框架的使用及关于图片优化的小案例

Android内存优化之图片优化相关推荐

  1. 前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论

    新闻热点 国内国外,前端最新动态 Microsoft 宣发面向 iOS 与 Android 平台的 Microsoft Edge:为了保证 Windows 用户各平台使用体验的一致性,Microsof ...

  2. 前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论... 1

    前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论 作者:王下邀月熊 编辑:徐川 前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解 ...

  3. 前端性能优化(图片优化)

    从输入URL到页面加载完成的过程:首先通过DNS(域名解析)把URL解析为对应的IP地址,然后与该IP地址确定的服务器建立起TCP网络连接.随后向服务器发送HTTP请求,服务器处理完HTTP请求后把目 ...

  4. 网站SEO优化之图片优化方法

    网站SEO优化之图片优化方法 网站中图片的优化是很多站长都比较容易忽略的细节,我们知道,对于搜索引擎目前的技术来讲,是无法识别图片的内容信息的,但为了提升用户体验,我们在进行文章或者网站布局时,必须进 ...

  5. 前端性能优化之图片优化

    图片优化的价值 为什么要做图片优化?图片优化的收益有多大? Google官方的最佳实践中关于图片优化有下面这样一段描述: 对于网页来说,在所下载的字节数中,图片往往会占很大比例.因此,优化图片通常可以 ...

  6. Web 性能优化: 图片优化让网站大小减少 62%

    摘要: 压缩各种格式的图片. 原文:Web 性能优化: 图片优化让网站大小减少 62% 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是 Web 性能优化的第二篇,上一篇在下面看点 ...

  7. android 多图片优化工具,总结Android App内存优化之图片优化

    前言 在Android设备内存动不动就上G的情况下,的确没有必要去太在意APP对Android系统内存的消耗,但在实际工作中我做的是教育类的小学APP,APP中的按钮.背景.动画变换基本上全是图片,在 ...

  8. Android:最全面详细的性能优化攻略(含内存优化、内存泄漏、绘制优化、布局优化、图片优化、APK优化、多线程优化、列表优化等)

    前言:佛教中有一句话:初学者的心态,拥有初学者心态是件了不起的事情.真正的大师永远怀有一颗学徒的心. 一.概述 在Android中,性能优化是细分领域中最难且也是知识面涉及最深和最广的方向之一. 更快 ...

  9. Android App 性能优化之图片优化

    接下来说明一下关于其他内存问题.图片问题,作为一个优秀的Android开发者,在图片的类型选择,图片显示前的处理都是要好好考虑的,因为不同类型图片在Android中的显示代价是不同的,使用不同显示方式 ...

最新文章

  1. Odoo 菜单美化的扩展模块
  2. 巧用 GitHub 创建自己的私人 Maven 仓库,及一些开发Library的建议
  3. python数据库连接池使用
  4. 数据结构思维 翻译完成
  5. 有机食品海报这样设计,收获了意想不到的效果…
  6. Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F 表情插入mysql 报错
  7. TableViewCell分割线消失的问题
  8. 用python调用ICTCLAS50进行中文分词
  9. 【源码部署】Linux环境下编译snort
  10. apa引用要在文中吗_APA、MLA格式引用规范
  11. Visual Studio C# Winform应用程序图标修改不了 更改图标不生效,发送桌面快捷方式与图标不一致解决办法
  12. 千峰教育软件测试教程笔记
  13. 浙江大学计算机学院的软件工程和软件学院的软件工程哪个好,关于举办计算机技术和软件工程硕士复习班的通知-硕士招生-浙江大学计算机科学与技术学院中文站...
  14. 除了Google Adsense外比较适合英文站投放的国外广告联盟
  15. 云计算如何与企业管理协同作战
  16. NLP NLU NLG 简介
  17. 圣诞音乐贺卡beepMusic_v6d;--铃儿响叮当;
  18. 办理北京市工作居住证攻略
  19. 每天喝6杯清水,就能轻松瘦身!
  20. PowerPoint Quick Tips PowerPoint快速提示 Lynda课程中文字幕

热门文章

  1. 浅谈分布式架构的几种主要开发方式
  2. Android Studio统一依赖管理Composing builds,2021最新网易Android面经
  3. php path separator,php_DIRECTORY_SEPARATOR 和 PATH_SEPARATOR
  4. PTA 乙级难点(全部)
  5. MATLAB学习七(二):数组比较sortrows
  6. QNAP-NAS外网访问——aliyun-ddns,docker,myqnapcloud
  7. 基于注意力机制的 中 英机器翻译
  8. 位图(BMP)文件头格式及数据分析
  9. 我的markdown编辑器
  10. c语言函数指针的多种赋值方法