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
  • 图片加载框架的缓存机制
  • 基本用法
  • 高阶功能对比(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缓存

基本用法

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

高阶功能对比(fresco vs NovaImageLoader)

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

注意点

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SWM341系列SDRAM应用

SWM341系列SDRAM应用 1、不同的时钟频率下,SDRAM的初始化参数设置 现象:驱屏应用,显示一段时间后出现卡住的现象 分析:SDRAM的初始 化参数优化 主频150Mhz,建议配置CASL 3,TRFC ≥8。 主频100Mhz,ClkDiv可配置为1…

低压500kW 发电机组测试交流干式负载箱的工作方式

低压500kW发电机组测试交流干式负载箱是一种专门用于测试发电机组性能的设备,其主要功能是在发电机组运行过程中,通过模拟实际负载情况,对发电机组的输出功率、电压、电流等参数进行实时监测和调整,以确保发电机组在各种工况下的稳…

手写瀑布流

之前用vue-masonry实现瀑布流 <!DOCTYPE html> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><meta name"viewport" content"widthdevice-width,initial-scale1,maximum-sc…

算法——矩阵,被围绕的区域

. - 力扣&#xff08;LeetCode&#xff09; 最开始也是考虑使用dfs&#xff0c;对于矩阵中的每个点&#xff0c;如果能到达边界的O&#xff0c;则跳过继续dfs。否则如果上下左右四个方向都无法到达边界的O&#xff0c;则说明当前的无法到达&#xff0c;在一个set中记录他的行数…

AcWing刷题-游戏

游戏 DP l lambda: [int(x) for x in input().split()]n l()[0] w [0] while len(w) < n:w l()s [0] * (n 1) for i in range(1, n 1): s[i] s[i - 1] w[i]f [[0] * (n 1) for _ in range(n 1)]for i in range(1, n 1): f[i][i] w[i]for length in range(2, …

WordPress外贸建站Astra免费版教程指南(2024)

在WordPress的外贸建站主题中&#xff0c;有许多备受欢迎的主题&#xff0c;如Avada、Astra、Hello、Kadence等最佳WordPress外贸主题&#xff0c;它们都能满足建站需求并在市场上广受认可。然而&#xff0c;今天我要介绍的是一个不断颠覆建站人员思维的黑马——Astra主题。 原…

Java

1.学生和老师都会有work方法&#xff0c;学生的工作是学习&#xff0c;老师的工作是教书&#xff0c;我利用了一个接口来实现&#xff1b; 2.同时&#xff0c;老师和学生都是人&#xff0c;并且都有姓名&#xff0c;姓名&#xff0c;年龄和身高等特征&#xff0c;我用了一个继承…

Python基于PyQt5制作的一个上位机软件,用来控制一个Arduino四自由度机械臂

PyQt_Arduino 介绍 用PyQt5制作的一个上位机软件&#xff0c;用来控制一个Arduino四自由度机械臂。当然&#xff0c;为了扩展的需要&#xff0c;界面是按照六自由度机械臂制作的。 开发环境 系统&#xff1a; windows10 处理器: Intel Core™i7-8550U CPU 1.8GHz 2.00GHz …

服务器远程桌面连接不上怎么办?

随着互联网的发展和远程办公的兴起&#xff0c;服务器远程桌面连接成为了许多企业和个人不可或缺的工具。偶尔我们可能会碰到服务器远程桌面连接不上的情况&#xff0c;这时候我们需要找到解决办法&#xff0c;确保高效地远程访问服务器。 天联组网——突破远程连接障碍 在我们…

isaacgym 渲染黑屏

问题描述&#xff1a; isaacgym安装完IsaacGym_Preview_4_Package.tar.gz之后&#xff0c;运行python joint_monkey.py没有任何内容现实&#xff0c;但是终端还是正常输出信息。 环境是ubuntu22服务器&#xff0c;python3.8&#xff0c;nvidia Driver Version: 515.65.01 CUDA…

Linux shell编程学习笔记45:uname命令-获取Linux系统信息

0 前言 linux 有多个发行版本&#xff0c;不同的版本都有自己的版本号。 如何知道自己使用的Linux的系统信息呢&#xff1f; 使用uname命令、hostnamectl命令&#xff0c;或者通过查看/proc/version文件来了解这些信息。 我们先看看uname命令。 1 uname 命令的功能和格式 …

如何合理利用chatgpt写高质量新闻稿,10分钟速成(五)

演示站点&#xff1a; https://www.cnsai.net/ 论文模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI下载源码 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着AI技术的快速发展和应用领域的不断拓展&a…

大模型之路2:继续趟一条小路

继续趟一条小路&#xff0c;可谓是充满了曲折&#xff0c;当然&#xff0c;必不可少的还是坑。 吐槽 看过的喷友&#xff0c;其实你看完以后&#xff0c;大概率也就是和我一起骂骂街&#xff0c;因为....我也的确没理清楚。 我也不知道做错了什么&#xff0c;就是运行不过去…

探索 ZKFair 的Dargon Slayer蓝图,解锁新阶段的潜力

在当前区块链技术的发展中&#xff0c;Layer 2&#xff08;L2&#xff09;解决方案已成为提高区块链扩容性、降低交易成本和提升交易速度的关键技术&#xff0c;但它仍面临一些关键问题和挑战&#xff0c;例如用户体验的改进、跨链互操作性、安全性以及去中心化程度。在这些背景…

马上蓝桥了,干货总结基础树论知识点

目录 今日知识点&#xff1a;对于每个子树如果和小于0就返回0&#xff1b;如果大于0就直接返回。 注意异或的性质&#xff0c;偶消奇不消&#xff0c;所以lca上面的都消掉了&#xff0c;并不需要跑lca&#xff0c;也就是说只需要把根到所有点的距离跑出来即可 如果上传过来小…

Redis如何实现分布式锁,单机Redis与集群Redis问题解决方案

场景1&#xff1a;在单机场景下&#xff0c;可以通过同步锁进行加锁 在单机系统下&#xff0c;该场景是适用的&#xff0c;所有的线程都需要等待同步锁释放 场景2&#xff1a;分布式场景下的分布式锁 场景1中的代码不适用与分布式系统&#xff0c;因为上述的同步锁是JVM层次的…

如何在CentOS安装StackEdit Markdown编辑器并实现无公网IP远程访问使用

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安…

从零开始构建gRPC的Go服务

介绍 Protocol Buffers and gRPC是用于定义通过网络有效通信的微服务的流行技术。许多公司在Go中构建gRPC微服务&#xff0c;发布了他们开发的框架&#xff0c;本文将从gRPC入门开始&#xff0c;一步一步构建一个gRPC服务。 背景 之前在B站看过一个gRPC教学视频&#xff0c;…

朵米3.5客服系统源码,附带系统搭建教程

朵米客服系统是一款全功能的客户服务解决方案&#xff0c;提供多渠道支持&#xff08;如在线聊天、邮件、电话等&#xff09;&#xff0c;帮助企业建立与客户的实时互动。该系统具有智能分流功能&#xff0c;可以快速将客户请求分配给适当的客服人员&#xff0c;提高工作效率。…

操作系统:浅谈文件系统

目录 1.理解文件系统 1.1.从磁盘开始的抽象存储结构 ​编辑 1.2.操作系统下的文件管理 1.2.1.知识储备 1.2.2.存储文件的属性 1.2.3.存储文件的内容 1.2.4.如何新建文件 1.2.5.如何理解目录 1.2.6.如何找到某一个文件 1.3.操作系统如何打开文件 2.软硬链接 我们知…