热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图片加载,压缩,缓存

Bitmap的高效加载BitmapFactory提供了四类方法:decodeFiledecodeStreamdecodeResourcedecodeByteArray;分别送文件系

Bitmap的高效加载

BitmapFactory提供了四类方法:decodeFile decodeStream decodeResource decodeByteArray;

分别送 文件系统 资源 输入流 字节数组中加载出一个bitmap对象;其中decodeFile decodeResource间接调用了decodeStream;

图片存储格式

《图片加载,压缩,缓存》 存储方法
《图片加载,压缩,缓存》

我们知道ARGB指的是一种色彩模式,里面A代表Alpha,R表示red,G表示green,B表示blue.

其实所有的可见色都是右红绿蓝组成的,所以红绿蓝又称为三原色,每个原色都存储着所表示颜色的信息值

ALPHA_8就是Alpha由8位组成

ARGB_4444就是由4个4位组成即16位

ARGB_8888就是由4个8位组成即32位

RGB_565就是R为5位,G为6位,B为5位共16位

位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真

高效加载bitmap核心思想就是采用BitmapFactory.Options来加载所需要的尺寸图片。通过bitmapFactory.Options可以按一定采样率来加载缩小后的图片 然后再显示在imageView中这样会降低内存占用从而从一定程度上避免OOM提供加载性能。

BitmapFactory.Options来缩放图片主要是通过它的inSampleSize参数即采样率 当inSampleSize为1时采样后的图片为原始图片大小;为2时为原始图片的二分之一,像素数为原始图的四分之一内存占用大小也为四分之一;inSampleSize的取值应该为2的指数 1 2 4  6 8 ;

如何获取采样率?

1 将BitmapFactory.Options的inJustDecodeBounds参数设置为true;

2 从bitmapFactory.Options中取出图片的原始宽高信息对应与outWidth和outHeight;

3 根据采样率规则并结合目标view计算出所需要的采样率inSampleSize;

4 将BitmapFactory.options的injustDecodeBounds参数设置为false 然后重新加载图片view;

进过这四个步骤加载出来的图片就是最终缩放后的图片

Android中的缓存策略;

缓存策略核心思想:程序第一次从网络加载图片后将其缓存在存储设备上这样下次使用图片时候就不用从网络中获取了为用户节省了流量;有时候为了提升用户体验还会吧图片在内存中缓存一份这样当app打算从网络中请求图片时候程序就会先从内存中获取如果没有就从存储设备中获取如果存储设备也没有再从网络加载;

同样这种思想也适合与其他文件;

缓存策略主要包含缓存的 添加 获取和 删除 三类操作;

为什么要删除缓存呢 因为内存的大小是有限的因此在使用缓存的是总要为缓存设置一个最大容量;

android中常用的缓存算法为LRU(Least Recently Used)

LRU有两种LruCache(内存缓存)和DiskLruCache(存储设备缓存);

LruCache是一个泛型类内部采用了一个LinkedHashMap以强引用的方式存储外界的缓存对象 是线程安全的;

提供了get和put方法来完成缓存的获取和添加操作;

强引用  直接的对象引用

软引用  当一个对象只有软引用时 系统内存不足时就会被GC回收掉;

弱引用  当一个对象只有弱引用时 可能随便会被Gc回收掉;

DiskLruCache不属于androidSDK的一部分

DiskLruCache的创建  

不能通过构造方法创建而是提供了open 方法创建自身 

open方法的四个参数(文件系统的路径,应用的版本号,单个节点对应的数据个数一般为一,缓存文件的总大小);

缓存的添加  

添加操作  通过Editor完成

缓存的获取  通过get方法得到一个Snapshot对象 在通过这个对象就可得到缓存文件的输入流


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 如何彻底清除顽固软件如360
    本文详细介绍了如何彻底卸载难以删除的软件,如360安全卫士。这类软件不仅难以卸载,还会在开机时启动多个应用,影响系统性能。我们将提供两种有效的方法来帮助您彻底清理这些顽固软件。 ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
  • 本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ... [详细]
  • 深入剖析 DEX 赛道:从 60 大头部项目看五大趋势
    本文通过分析 60 大头部去中心化交易平台(DEX),揭示了当前 DEX 赛道的五大发展趋势,包括市场集中度、跨链协议、AMM+NFT 结合、新公链崛起以及稳定币和衍生品交易的增长潜力。 ... [详细]
author-avatar
攻玉是我_944
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有