Android的图片加载框架

Android的图片加载框架

  • 为什么要使用图片加载框架?
  • 图片加载框架
    • 1. Universal Image Loader [https://github.com/nostra13/Android-Universal-Image-Loader](https://github.com/nostra13/Android-Universal-Image-Loader)
    • 2. Glide [https://muyangmin.github.io/glide-docs-cn/](https://muyangmin.github.io/glide-docs-cn/)
    • 3. Picasso [https://square.github.io/picasso/Picasso](https://square.github.io/picasso/Picasso)
    • 4. Fresco [https://www.fresco-cn.org/](https://www.fresco-cn.org/)
    • NovaImageLoader
  • 图片加载框架的缓存机制
  • 如果要你自己实现一套图片加载框架该如何实现?
  • 给一个url,如何把图片渲染到ImgeView上去?具体流程?
  • 基本用法
  • 高阶功能对比(fresco vs NovaImageLoader)
  • 注意点
    • 图片加载需要注意使用控件尺寸

为什么要使用图片加载框架?

在这里插入图片描述
在Android开发中,有许多图像加载框架可供选择。
图片加载框架是有一个总体套路的,我们自己也可以通过这个流程实现一个图片框架。
图片加载:封装、解析、下载、解码、变换、缓存、显示等。
大型工程
需考虑图片种类、图片使用率、加载性能、缓存机制、高效、简便的完成图片渲染任务。
图片资源类型:jpeg、jpg、png、Webp、AWebp、Lottie、SVGA、NinePatch(点9)、AVD、File(透明视频)
存放位置选择:当资源大小超过10Kb时,存放在NOS上;资源较小时,可以根据资源类型选择存放在drawable或assets目录下。
那么其他图片加载框架凭什么就能比我自己写的好?

图片加载框架

1. Universal Image Loader https://github.com/nostra13/Android-Universal-Image-Loader

是最早出现的一个知名图片加载显示框架,虽然现在已经停止维护了,但是仍然被很多的开发者所使用。并且,后续出现的Glide,Picasso和Fresco也都或多或少借鉴了它的设计思想和理念。
在这里插入图片描述

2. Glide https://muyangmin.github.io/glide-docs-cn/

Glide是在2013年由Google推出的,它是当时最的图片加载库之一。Glide的速度比Picasso更快,Glide的长处是处理大型的图片流,如gif、video。如果要制作视频类应用,Glide当为首选。
在这里插入图片描述

3. Picasso https://square.github.io/picasso/Picasso

是在2015年由Square公司推出的,它比Glide体积小很多且图像质量更高
在这里插入图片描述

4. Fresco https://www.fresco-cn.org/

Fresco是在2016年由Facebook推出的,可以说是综合了之前图片加载库的优点,其在5.0以下的内存优化方面表现不错。但是,Fresco在处理大型图片流时速度较慢
在这里插入图片描述
Image Pipeline
在这里插入图片描述

NovaImageLoader

基于已有图片加载框架的优点,云音乐自己封装好的图片加载框架。

图片加载框架的缓存机制

当用户应用打算从网络上请求一张图片时,程序会首先从内存中去获取,如果内存中没有那就从存储设备中去获取,如果存储设备中没有,那就从网络中下载这张图片。因为从内存中加载图片比从存储设备中加载图片要快,所以这样既提高了程序的效率又为用户节约了不必要的流量开销。

Fresco的缓存机制是由Producer/Consumer的框架来实现的。图片获取是由各级Producer实现的,而将获取到的图片添加到缓存中是由各级Cusumer来实现的。

Fresco有三级缓存:L1、L2和L3。其中,L1缓存是最快的,但是容量最小;L2缓存容量最大,但是速度最慢;L3缓存速度介于L1和L2之间,但是容量最小。

除了Fresco,其他图片加载框架也有缓存机制。Picasso的缓存机制包括内存缓存磁盘缓存,而Glide的缓存机制包括内存缓存磁盘缓存网络缓存HTTP缓存

如果要你自己实现一套图片加载框架该如何实现?

资源封装(加密、序列化,方便数据存储) -> 活动缓存(暂存当前正在使用的图片资源) -> 内存缓存(LRU最近最少使用策略) -> 磁盘缓存(LRU最近最少使用策略)

给一个url,如何把图片渲染到ImgeView上去?具体流程?

第一步: 在UI线程定义 网络图片链接;
第二步: 新建子线程请求图片,请求结果为bitmap,解码数据流;
第三步: 在UI线程将图片加载出来;

基本用法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

高阶功能对比(fresco vs NovaImageLoader)

温馨提示:以下NovaImageLoader是个人自定义组件笔记,其他小伙伴看到NovaImageLoader就可以跳过啦
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意点

图片加载需要注意使用控件尺寸

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/789064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的多层SP中Cursor的m_max_cursor_index相关BUG分析

源码分析丨MySQL的多层SP中Cursor相关BUG 一、问题发现 在一次开发中在sp中使用多层cursor的时候想知道每层的m_max_cursor_index值分别是多少,以用来做后续开发。于是做了以下的试验,但是发现第一个level2那层的m_max_cursor_index的值有点问题。 注&…

基于SpringBoot和Vue的房产销售系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的房产销售系统的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&#x1f…

【Spring实战项目】SpringBoot3整合WebSocket+拦截器实现登录验证!从原理到实战

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

MySQL-linux安装-万能RPM法

一、MySQL的Linux版安装 1、 CentOS7下检查MySQL依赖 1. 检查/tmp临时目录权限(必不可少) 由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限。执行 : chmod -R 777 /tmp2. …

Aurora8b10b(2)上板验证

文章目录 前言一、AXI_Stream数据产生模块二、上板效果总结 前言 上一篇内容我们已经详细介绍了基于aurora8b10b IP核的设计,本文将基于此进一步完善并且进行上板验证。 设计思路及代码思路参考FPGA奇哥系列网课 一、AXI_Stream数据产生模块 AXIS协议是非常简单的…

Boost之Log: (3)、简单封装

设计目标: 1、每个Logging source对应一个目录,可以设置日志文件数,日志大小,目录名,文件名等 2、所有logging source日志目录都在一个根目录下。 3、可以动态创建和删除logging source 4、打印出日期时间和日志严重等级 示例代码…

前端试题2#记录

1、介绍以下CSS的盒子模型 盒子模型分为两种: (1)第一种是W3c标准的盒子模型(标准盒模型) width和height:内容的宽度、高度(不是盒子的宽度、高度)。padding:内边距。…

HarmonyOS入门-ArkTS学习(一)

1. 什么是ArkTS语言 学习之前,我们先初步了解下什么是ArkTS 官方指南这样介绍: ArkTS是TS的超集,ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力,再配合ArkUI开发框架中的系统组件及其相关的事件方法、属性方法等共…

OpenHarmony实战:轻量级系统之子系统移植概述

OpenHarmony系统功能按照“系统 > 子系统 > 部件”逐级展开,支持根据实际需求裁剪某些非必要的部件,本文以部分子系统、部件为例进行介绍。若想使用OpenHarmony系统的能力,需要对相应子系统进行适配。 OpenHarmony芯片适配常见子系统列…

留学生在美国大学利用AI工具到底算不算作弊呢?

自2022年以来,美国大学就开启了一场AI作弊与反作弊大战 战场小至测验,大至申请 这场战争并没有一方胜利,作弊者心思费尽 校方反作弊弄得教授们苦不堪言 那么作为中国留学生该如何避免这场战役呢? 毕竟还是学业要紧呢…… 故事…

让六西格玛培训有效的三个步骤,拿走不谢!

近年来,六西格玛作为一种先进的质量管理方法,被众多企业视为提升产品质量、优化流程、减少浪费的利器。然而,如何使六西格玛培训真正落地生根,发挥出其应有的效果,成为了许多企业关注的焦点。本文,天行健Si…

每日五道java面试题之消息中间件MQ篇(二)

目录: 第一题. RabbitMQ的工作模式第二题. 如何保证RabbitMQ消息的顺序性?第三题. 消息如何分发?第四题. 消息怎么路由?第五题. 如何保证消息不被重复消费?或者说,如何保证消息消费时的幂等性? …

Android adb ime 调试输入法

目录 前言列出所有输入法仅列出输入法 id列出所有输入法的所有信息 启用/禁用 输入法启用输入法禁用输入法 切换输入法还原输入法 前言 安装多个输入法后&#xff0c;可以在设置里进行切换。 既然是开发&#xff0c;能用命令就就命令~ ime 帮助说明&#xff1a; ime <c…

目标检测、识别和语义分割的标注工具安装

计算机视觉 图像分类&#xff08;目标检测&#xff09;&#xff1a;一张图像中是否含某种物体物体定位&#xff08;目标检测与目标识别&#xff09;&#xff1a;确定目标位置和所属类别。语义分割&#xff08;目标分割和目标分类&#xff09;&#xff1a;对图像进行像素级分类…

推荐算法策略需求-rank model优化

1.pred_oobe (base) [rusxx]$ pwd /home/disk2/data/xx/icode/baidu/oxygen/rus-pipeline/pipeline-migrate/UserBaseActiveStatPipeline/his_session (base) [rusxx]$ sh test.sh 2. user_skill_history_dict_expt2包含userid [workxx]$ vim /home/work/xx/du-rus/du_rus_o…

Python 之 Flask 框架学习

毕业那会使用过这个轻量级的框架&#xff0c;最近再来回看一下&#xff0c;依赖相关的就不多说了&#xff0c;直接从例子开始。下面示例中的 html 模板&#xff0c;千万记得要放到 templates 目录下。 快速启动 hello world from flask import Flask, jsonify, url_forapp F…

【edge浏览器无法登录某些网站,以及迅雷插件无法生效的解决办法】

edge浏览器无法登录某些网站&#xff0c;以及迅雷插件无法生效的解决办法 edge浏览器无法登录某些网站&#xff0c;但chrome浏览器可以登录浏览器插件无法使用&#xff0c;比如迅雷如果重装插件重装浏览器重装迅雷后仍然出现问题 edge浏览器无法登录某些网站&#xff0c;但chro…

基于FPGA的SPI_FLASH程序设计

SPI_FLASH简介 spi_flash是一种通用存储器&#xff0c;也称为SPI NOR Flash或SPI Flash。它使用SPI&#xff08;Serial Peripheral Interface&#xff09;接口进行通信&#xff0c;可以通过串行方式读写数据。spi_flash的特点是工作电压低&#xff0c;体积小&#xff0c;读写速…

【单片机家电产品学习记录--红外线】

单片机家电产品学习记录–红外线 红外手势驱动电路&#xff0c;&#xff08;手势控制的LED灯&#xff09; 原理 通过红外线对管&#xff0c;IC搭建的电路&#xff0c;实现灯模式转换。 手势控制灯模式转换&#xff0c;详细说明 转载 1《三色调光LED台灯电路》&#xff0c…

矩阵空间秩1矩阵小世界图

文章目录 1. 矩阵空间2. 微分方程3. 秩为1的矩阵4. 图 1. 矩阵空间 我们以3X3的矩阵空间 M 为例来说明相关情况。目前矩阵空间M中只关心两类计算&#xff0c;矩阵加法和矩阵数乘。 对称矩阵-子空间-有6个3X3的对称矩阵&#xff0c;所以为6维矩阵空间上三角矩阵-子空间-有6个3…