积分 447
贴子 53
回贴
前言Android缓存机制:如果没有缓存,在大量的网络请求从远程获取图片时会造成网络流量的浪费,加载速度较慢,用户体验不好;今天我们就来聊聊Glide的缓存机制一、Glide中缓存概念简述Glide将它分成了两个模块,一个是内存缓存,一个是硬盘缓存;1、内存缓存内存缓存又分为两级,一级是LruCache缓存,一级是弱引用缓存内存缓存的作用:防止应用重复将图片数据读取到内存当中。LruCache缓存:不在使用中的图片使用LruCache来进行缓...
2022-09-16 17:08:37 8232浏览 2点赞 0回复 1收藏
前言Glide是纯Java写的Android端开源图片加载库,能够帮助我们下载、缓存、展示多种格式图片,也包括GIF格式;昨天我们从源码里分析了,glide的缓存策略机制;那今天我们就趁热打铁来分析一波加载流程;一、glide常用的加载方法1、加载图片到imageViewGlide.with(Contextcontext).load(Strinturl).into(ImageViewimageView);2、各种形式的图片加载到ImageView加载本地图片FilefilenewFile(getExternalCacheDir()+"image.jpg");Glid...
2022-09-16 17:08:25 9592浏览 3点赞 0回复 2收藏
“在构建RequestManager的时候通过lifecycle.addListener(connectivityMonitor);添加网络变化的监听,Fragment生命周期的变化会通知到默认实现类DefaultConnectivityMonitor中对应的方法。前言glide缓存策略我们分析过了;glide加载流程我们上一篇文章也分析过了;那么这次我们再来分析下Glide生命周期管理详解一、Glide生命周期原理详解Glide.with(this).asBitmap()只允许加载静态图片,若传入gif图会展示第一帧(要在load之前)...
2022-09-16 17:08:15 6639浏览 1点赞 0回复 1收藏
前言Android的三级缓存,其中主要的就是内存缓存和硬盘缓存。这两种缓存机制的实现都应用到了LruCache算法,今天我们就从使用到源码解析,来彻底理解Android中的缓存机制;一、LruCache概念介绍1.什么是LruCacheLruCache是Android3.1所提供的一个缓存类,所以在Android中可以直接使用LruCache实现内存缓存。而DisLruCache目前在Android还不是AndroidSDK的一部分,但Android官方文档推荐使用该算法来实现硬盘缓存;LruCache是个泛...
2022-09-15 10:19:09 7830浏览 2点赞 0回复 1收藏
将一个大型的项目拆分成多个Module或者新开的组件化项目,想要的预期是这些module之间是平级的关系。这样一来就可以使得业务相对集中,每个人都可以专注在一件事上。同时,代码的耦合度也会随之降低,达到高度解耦状态,因为同级的module不存在依赖关系,在编译上就是隔离的,这会让组件间的依赖非常清楚,同时也具有更高的重用性,组件强调复用,模块强调职责划分。他们没有非常严格的划分。达到可复用要求的模块,那么这个模...
2022-09-14 10:17:21 9088浏览 17点赞 8回复 14收藏
前言LiveData是一种可观察的数据存储器类。与常规的可观察类不同,LiveData具有生命周期感知能力,意指它遵循其他应用组件(如Activity、Fragment或Service)的生命周期。这种感知能力可确保LiveData仅更新处于活跃生命周期状态的应用组件观察者。LiveData本身是观察者,观察组件的Lifecycle,也是被观察者,数据变化时要通知数据的观察者。前面我们讲解了Lifecycle实现原理,今天我们来看LiveData源码进阶之lifecycle组件原理分...
2022-09-13 15:51:33 7594浏览 2点赞 0回复 1收藏
最近博主在研究Android系统的binder。binder是什么可以理解为Andorid系统中的一种进程间通信的方式,虽然Android系统基于Linux,但是它并没有采用Linux自带的进程间通信方式,而是采用了更高效的binder,理解binder对于理解Android系统具有至关重要的作用。binder原理图如下:Binder通信采用cs架构,和Socket一样,但是稍微复杂。binder组件包含Client、Server、ServiceManager以及binder驱动,其中ServiceManager用于管理系统...
2022-09-08 11:03:20 7591浏览 4点赞 1回复 2收藏
前言Retrofit是一个基于AOP思想,对RestfulApi注解进行动态代理的网络框架;今天我们就来探讨下实现原理,一起进步一、使用Retrofit1、包引用在gradle文件中引用retrofitcompile'com.squareup.retrofit2:retrofit:2.3.0'compile'com.squareup.retrofit2:retrofitconverters:2.3.0'compile'com.squareup.retrofit2:retrofitadapters:2.3.0'如果需要使用更多扩展功能,比如gson转换,rxjava适配等,可以视自己需要继续添加引用;com...
2022-09-07 11:00:01 7475浏览 6点赞 4回复 6收藏
“tryCaptureView(Viewchild,intpointerId)这是一个抽象类,必须去实现,也只有在这个方法返回true的时候下面的方法才会生效。前言ViewDragHelper类,是用来处理View边界拖动相关的类;主要功能处理在View上的触摸事件,记录触摸点、计算距离、滚动动画、状态回调等,如果我们自己手动实现自然会很麻烦还可能出错,而这个类会帮助我们大大简化工作量;今天我们就来分析一波;一、ViewDragHelper的中主要API介绍1、ViewDragHelpercr...
2022-09-07 10:54:16 5471浏览 12点赞 2回复 10收藏
前言AndroidStartup提供一种在应用启动时能够更加简单、高效的方式来初始化组件。开发人员可以使用AndroidStartup来简化启动序列,并显式地设置初始化顺序与组件之间的依赖关系;今天我们就来聊聊一、使用步骤简单介绍使用AndroidXAppStartup来运行所有依赖项的初始化有两种方式:自动初始化;手动初始化(也是延迟初始化);1、自动初始化在build.gradle文件内添加依赖;implementation"androidx.startup:startupruntime:1.0.0alpha0...
2022-09-06 11:15:32 8453浏览 6点赞 2回复 5收藏
“从今年二月份的第一个开发者预览版开始,到九月份更新的Beta5,Android12终于走到了最后一个测试版。AndroidDevelopers官方博客消息,正式版的Android12将于数周之后更新,鉴于目前9月已经过去了三分之一,因此正式版最快可能也要等到9月底甚至10月初才能发布。不过由于正式版已经临近,因此Beta5与正式版应该不会有很大的差别,我们也可以借此一窥正式版的Android12将会有怎样的UI以及特性。经过多个版本的迭代,MateralYou...
2022-09-06 11:13:09 7784浏览 11点赞 6回复 10收藏
前言WindowManagerService是位于Framework层的窗口管理服务,它的职责是管理系统中的所有窗口,也就是Window,关于Window的介绍,通俗来说,Window就是手机上一块显示区域,也就是Android中的绘制画布Surface,添加一个Window的过程,也就是申请分配一块Surface的过程,而整个流程的管理者正是WindowManagerService;今天我们来分析下窗口WMS相关的知识点;一、窗口相关概念1、WindowManagerService概念(1)WindowManagerService概...
2022-09-05 11:57:41 1.3w浏览 8点赞 3回复 5收藏
前言View的工作原理中最重要的就是测量、布局、绘制三大过程,而其中测量是最复杂的;那么我们就来介绍下View的测量过程;一、MeasureSpec测量自身的大小的时候,会执行measure(intwidthMeasureSpec,intheightMeasureSpec)方法。注意方法中两个参数,它们其实是一个int类型的MeasureSpec;1、specMode测量模式分为三种:●UNSPECIFIED模式:本质就是不限制模式,父视图不对子View进行任何约束,View想要多大要多大,想要多长要多长...
2022-09-05 11:56:09 6888浏览 2点赞 0回复 1收藏
前言前一篇我们讲解了View的Measure过程,那今天我们来讲解下Layout;View的layout方法作用是确定View的位置,ViewGroup的layout方法不仅要确定自身的位置,还有确定子View的位置;Android进阶之深入理解View的测量(Measure)流程机制一、Layout流程源码详解1、performLayoutView三大工作流程是从ViewRootImplperformTraversals开始的,其中performMeasure、performLayout、performDraw方法分别对应了View的测量、布局、绘制;从per...
2022-09-05 11:53:17 4410浏览 1点赞 0回复 0收藏
上一篇我们讲了Linux系统的启动流程,本文讲解一下Andorid系统的启动流程。手把手教你分析Linux启动流程Andorid系统是在嵌入式行业中广泛应用的系统,手机、平板、机器人、汽车中控系统都有使用安卓系统的,在应用方面的优势是安卓系统自带UI,使用Linux需要自己用QT开发界面,并且界面没那么好看。Android系统架构图:由此图可知,Android系统基于Linux内核。Linux之上有一个HAL层,这一层出现的原因:Linux是开源的,基于它的...
2022-09-02 11:23:04 1.1w浏览 9点赞 4回复 6收藏
前言为什么View.post()的操作是可以对UI进行操作的呢,即使是在子线程中调用View.post()今天我们就来分析分析一、View.post源码深入分析1、View.post()View的post方法如下:publicbooleanpost(Runnableaction){1、首先判断AttachInfo是否为nullfinalAttachInfoattachInfomAttachInfo;if(attachInfo!null){1.1如果不为null,直接调用其内部Handler的postreturnattachInfo.mHandler.post(action);}2、否则加入当前View的等待队列ge...
2022-09-01 13:59:00 1.1w浏览 6点赞 2回复 5收藏
前言DiskLruCache是一种管理数据存储的技术,单从Cache的字面意思也可以理解到,"Cache","高速缓存";之前我们介绍过lrucache,没有看过老铁,可以从历史记录看;今天我们来从源码上分析下DiskLruCache;Android进阶之彻底理解LruCache缓存机制原理一、为什么用DiskLruCache1、LruCache和DiskLruCacheLruCache和DiskLruCache两者都是利用到LRU算法,通过LRU算法对缓存进行管理,以最近最少使用作为管理的依据,删除最近最少使用的...
2022-09-01 13:57:30 6466浏览 7点赞 2回复 6收藏
前言前几篇文章,讲述了measure,layout流程等,接下来将详细分析绘制流程。测量流程决定了View的大小,布局流程决定了View的位置,那么绘制流程将决定View的样子,一个View该显示什么由绘制流程完成;那我们就开始开车了;一、performDraw三大工作流程始于ViewRootImplperformTraversals,在这个方法内部会分别调用performMeasure,performLayout,performDraw三个方法来分别完成测量,布局,绘制流程。那么我们现在先从performDr...
2022-09-01 13:56:28 6658浏览 1点赞 1回复 0收藏
前言首先祝大家国庆节快乐,玩的开心;一、Android坐标系详解说到Android坐标系其实就是一个三维坐标,Z轴向上,X轴向右,Y轴向下。这三维坐标的点处理就能构成Android丰富的界面或者动画等效果;1、Android屏幕一些值的获取①获取屏幕区域的宽高等尺寸获取DisplayMetricsmetricsnewDisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metrics);intwidthPixelsmetrics.widthPixels;intheightPixelsmetrics.heig...
2022-09-01 13:53:24 1.0w浏览 11点赞 3回复 8收藏
前言Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutineimageloader,即协程图片加载库;与传统的图片加载库Glide,Picasso或Fresco等相比。该具有轻量(只有大约1500个方法)、快、易于使用、更现代的API等优势;它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角。并且是全用Kotlin编写,如果你是纯Kotlin项目的话,那么这个库应该是你的首选;一、Coil介绍和使用1、Coil介绍Coil是一个Android...
2022-09-01 11:59:49 6750浏览 1点赞 0回复 1收藏