自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 Glide的缓存源码分析

Glide的缓存流程上一篇讲解了Glide的整体流程,其实很多时候,只有第一次加载图片的时候,我们才会按照那一个流程去走。因为很多时候,我们都是有缓存了。有了缓存之后,加载流程就会稍微变一下了。那么今天,我们就来讲解一下Glide中的缓存。在讲解Glide缓存之后,我建议大家先去了解一下LinkedHashMap的实现。因为这里涉及到LRU算法。先来一张Glide缓存的流程图吧,让大家对Glide的流程有一个印象,方便之后的分析,以下流程图是基于配置了允许缓存的流程,配置了不允许缓存的不在本博客的讨论范

2022-03-28 21:15:11 462 1

原创 对线Android面试官系列:Android Handler面试连环问题解析,从基础→底层→源码全盘总结

先来一个自己画的Handler机制整体流程图,本文不会带着你走一遍源码,只会对重点需要注意的地方以及一些细节的处理做出解释,让你更好的了解Handler机制整体的运作。Handler通过sendMessage()发送Message到MessageQueue队列;Looper通过loop(),不断提取出达到触发条件的Message,并将Message交给target来处理;经过dispatchMessage()后,交回给Handler的handleMessage()来进行相应地处理。将Messag

2022-03-23 21:18:37 208 1

原创 Android-Bitmap优化

概述在日常开发中我们经常遇到加载图片报出oom的错误,我们要解决这个问题,首先要明白oom代表out of memory 内存溢出,因为手机内存有限,分给每个应用的内存有限,所以要解决这个问题就是要解决图片占用内存问题 android 中图片是以bitmap的形式存在的,那么bitmap中所占的内存,直接影响到了是否oom,我们了解一下bitmap的占用内存的计算方法Bitmap到底占多大内存从本地加载或者从网络加载可以用下面的公式计算图片的长度 * 图片的宽度 * 一个像素点占用的字节数如果

2022-03-18 22:06:20 927

原创 Android-ViewModel源码分析

简介ViewModel是JetPack生命周期管理库中的一个组件。它可以提供并且管理数据,可感知生命周期,同时不会随着配置(eg:屏幕旋转导致的Activity重新创建)变更而改变。 使用它可以方便的将UI界面和数据逻辑剥离开来,从而达到 UI只负责显示数据和处理用户操作,ViewModel负责提供、管理数据以及通讯。 典型使用场景:作为数据持有和管理者(eg:处理网络请求);Fragment之间的通信;ViewModel代替加载器(eg:CursorLoader)。生命周期官方对其生命周期

2022-03-18 22:05:07 246

原创 RecyclerView-ViewCacheExtension-使用及踩坑

转载于:https://juejin.cn/post/7033539224481562661作者:Delicia_Lani前言最近遇到一个需求,需求实现上并不复杂,大概长这个样:基本上就是一个RecyclerView 嵌套多个子 RecyclerView ,有横向的,也有竖向的。RecyclerView 实现多类型布局有各种各样的实现方式,这里就不多说了。本来很开心的实现完了,在测试中确遇到了非常严重的性能问题,也就了本篇文章的诞生。具体的讲,嵌套的横向滑动的RecyclerView 没有.

2022-03-14 19:44:22 752 1

原创 Kotlin常用Collection集合操作整理

本篇记录了Kotlin常用集合的相关操作,用以熟练使用Kotlin里的相关集合。集合接口与相关函数位于kotlin.collections 包中。常用集合Kotlin 标准库提供了基本集合类型的实现: Set、List 以及 Map。 一对接口代表每种集合类型:一个 只读 接口,提供访问集合元素的操作。一个 可变 接口,通过写操作扩展相应的只读接口:添加、删除和更新其元素。其中灰色是不可变集合,黄色是可变集合。Iterator意为迭代器,Collection是只读接口,而MutableCol

2022-03-08 21:35:14 800

原创 一文分析Binder机制和AIDL的理解

为什么要去理解Android的进程间通信机制对于Android开发工程师来说,如果不去理解进程间通信机制也可以使用系统提供的API完成应用开发,但如果想要达到更高的层级,那么就不能简单只会调用API。无论是工作中遇到一些疑难问题,还是想要学习源码的一些功能实现,或者是想要提升APP的性能等,这些工作都需要我们去看系统的源码,而系统的源码中进程间通信无处不在,如果不理解进程间通信机制,那么很难看懂系统源码,而且容易迷失在大量的代码中。Android 进程间通信机制为什么使用Binder作为Android

2022-03-04 17:24:40 2703

原创 一张图带你走进Retrofit源码世界

前提只有了解了框架的原理才能更好的使用她,才能定位问题的根本。写这篇文章的也是为了自我的学习和提升。其实看源码就跟看书一样,看了这么多本书有什么用呢,其实不然,这些知识已经潜移默化的影响了你的思维。你之后在阅读源码时,会发现能更快的上手了。引用别人的一句话:当我还是个孩子时吃的很多食物,大部分已经一去不复返而且被我忘掉了,但可以肯定的是,它们中的一部分已经长成我的骨头和肉友情提醒1.这篇文章主要讲retrofit如何request 和 response2.不会详细到每个api3.文章会以一个

2022-03-03 21:52:01 141 1

原创 高级UI之Paint-Xfermode-总结

前言Xfermode国外有大神称之为过渡模式, 这种翻译比较贴切但恐怕不易理解,大家也可以直接称之为图像混合模式一、图像混合模式在之前的Paint的使用当中我们提到了高级渲染和滤镜,那么今天我们来学习最后一个内容点Xfermode,我们能通过使用Xfermode能够完成图像组合的效果1.XFermode在使用Paint的时候,我们能通过使用Xfermode能够完成图像组合的效果将绘制的图形的像素和Canvas上对应位置的像素按照一定的规则进行混合,形成新的像素,再更新到Canvas中形成最终的图形

2022-03-02 22:09:38 2085

原创 高级UI之Paint(滤镜,颜色通道,矩阵运算)

前言在之前的几次课当中我们已经详细了解到整个android程序,从启动再到绘制的整体流程,从这中间我们又牵扯出了Canvas绘制图形的画板和我们的Paint控制色彩样式的画笔,那么之前基础篇我们就不进行详细的解释,那些API在之前的基础篇已经公布出来,我也注释的非常详细,今天我门来了解Paint高级篇真正需要了解的滤镜滤镜1.滤镜效果从上图我们可以看到 四张滤镜效果图像,其色彩的显示效果各不一样,也就是说所谓滤镜其实只不过是对于原本图像色彩进行调整,那么需要对图像的色彩进行调整操作,我们会需要知道

2022-03-01 22:06:31 440

原创 Shadow-插件化框架分析

框架简单介绍Shadow 是最近腾讯开源的一款插件化框架。原理是使用宿主代理的方式实现组件的生命周期。目前的插件化框架,大部分都是使用 hook 系统的方式来做的。使用代理的基本上没有成体系的框架,只是一些小 demo,Shadow 框架的开源,在系统 api 控制越来越严格的趋势下,算是一个新的方向。Shadow 最大的两个亮点是:零反射框架自身动态化下面就具体分析一下框架的实现。框架结构分析框架结构图图项目目录结构├── projects│ ├── sample //

2022-02-28 19:35:03 2453

原创 Android-ViewModel源码分析

简介ViewModel是JetPack生命周期管理库中的一个组件。它可以提供并且管理数据,可感知生命周期,同时不会随着配置(eg:屏幕旋转导致的Activity重新创建)变更而改变。 使用它可以方便的将UI界面和数据逻辑剥离开来,从而达到 UI只负责显示数据和处理用户操作,ViewModel负责提供、管理数据以及通讯。 典型使用场景:作为数据持有和管理者(eg:处理网络请求);Fragment之间的通信;ViewModel代替加载器(eg:CursorLoader)。生命周期官方对其生命周期

2022-02-25 22:09:03 545

原创 大厂Android高频问题:Android-触摸事件如何传递?

前言触摸传递机制可以说是Android开发面试高频的一道问题,但总有小伙伴在回答这道问题总不能让面试满意, 本篇就搞清楚面试官问你对触摸传递机制原理时,他最想听到的和其实想问的应该是哪些?下文中,我们将简单剖析一下 Android 的触摸传递机制。涉及到的类和方法总的来说,触摸传递过程是由上至下的。一个典型的触摸事件,从 Activity 开始,经过根视图,再经过层层 ViewGroup,最终传递到某一个 View 或 ViewGroup 上,进行处理。主要涉及到的类自然包括 Activity,Vie

2022-02-24 22:25:03 424

原创 Framework专题—谈谈你对Zygote的理解?

前言Zygote可以说是Android开发面试很高频的一道问题,但总有小伙伴在回答这道问题总不能让面试满意, 在这你就要搞清楚面试问你对Zygote的理解时,他最想听到的和其实想问的应该是哪些?下面我们通过以下几点来剖析这道问题!了解Zygote的作用熟悉Zygote的启动流程深刻理解Zygote的工作原理下面来我们来深入剖析一、 Zygote的作用Zygote的作用分为两点:启动SystemServer孵化应用进程关于这个问题答出了这两点那就是OK了。可能大部分小伙伴可能能

2022-02-22 21:44:31 286

原创 深入解析Android-SharedPreferences源码

概述SharedPreferences(简称SP)是Android中常用的数据存储方式,SP采用key-value(键值对)形式,主要用于轻量级的数据存储,尤其适合保存应用的配置参数,但不建议使用SP来存储大规模的数据,可能会降低性能。SP采用XML文件格式来保存数据,该文件位于 /data/data/<packageName>/shared_prefs/。使用示例// 加载SP文件数据,“my_prefs”为文件名SharedPreferences sp = getSharedPre

2022-02-21 20:59:20 615 1

原创 OkHttp源码解析(构建者模式、责任链模式、主线流程)

在分析OkHttp的核心流程已经核心类之前,我们先搞清楚两个概念,一个是OkHttpClient和Request在创建时所使用的构建者模式;另外一个则是负责响应处理的拦截器模式;OkHttpClient/Request的构建者模式解析基本概念构建者(又称建造者)模式允许我们使用多个简单的对象一步一步构建成一个复杂的对象。概念解释如果你要装修房子,你就会要考虑这个房子的整体设计怎么做,用地中海风格?欧美风格?纯中式风格?墙面是刷白色的漆?贴瓷砖?还是用其他颜色?水电安装怎么处理?防水怎么处理?主卧怎

2022-02-20 19:48:01 416

原创 UI绘制流程之Draw绘制流程

前言从前面的几篇文章,我门能够的到知道ui的测量和布局,那么这次,我们首先来关注下我门的ui是怎么具体画出来的。那么在这里我们首先需要了解的是具体绘制的流程以及,paint和Canvas在这中间所扮演的角色绘制流程在之前的课程里我们都提到了在performTraversals当中一次调用了performMeasure,performLayout,performDraw那么前两者我们现在不关注, 现在主要关注draw正在具体干嘛,那么我们看到ViewRootImpl. performDraw方法看下他是

2022-02-15 22:03:44 563 1

原创 深入分析Android-Handler消息机制

概述Handler是Android消息机制的上层接口。通过它可以轻松地将一个任务切换到Handler所在的线程中去执行。通常情况下,Handler的使用场景就是 更新UI。Handler的使用在子线程中,进行耗时操作,执行完操作后,发送消息,通知主线程更新UI。public class Activity extends android.app.Activity { private Handler mHandler = new Handler(){ @Override

2022-02-14 22:10:18 91 1

原创 大厂Android高频问题:谈谈Activity的启动模式?

前言Activity可以说是Android开发面试高频的一道问题,但总有小伙伴在回答这道问题总不能让面试满意, 在这你就要搞清楚面试问你对Activity启动模式时,他最想听到的和其实想问的应该是哪些?下面我们通过以下几点来剖析这道问题!启动模式是什么?启动模式如何设置?Activity的启动模式区别?应用场景以及哪些注意的点?1.activity堆栈流程以及四种启动模式一个应用由多个Activity构成,多个Activity构成了任务,系统以栈方式进行管理任务(也就是管理多个Activi

2022-02-11 22:00:38 154

原创 RecyclerView性能优化分析

概述RecyclerView有着极高的灵活性,能实现ListView、GridView的所有功能。在日常开发中,使用非常广泛,如果使用不当将会影响到应用的整体性能,所以有必要了解一下如何更高效的使用。数据处理与视图绑定分离RecyclerView的 bindViewHolder方法是在UI线程进行的,如果在该方法进行耗时操作,将会影响滑动的流畅性。优化前:class Task { Date dateDue; String title; String description;

2022-02-09 21:54:11 1464 1

原创 一文分析EventBus-事件总线的使用方法和实现原理

前言本文主要从源码的角度来分析事件总线 EventBus 的实现原理, EventBus 是常用的消息传递的方式之一,其他常见的消息传递的方式还包括 Handler、BroadcastReceiver、Listener。通过本篇你在掌握 EventBus 基本使用的基础之上,能够掌握 EventBus 的实现原理。下面的框架图可以清晰的看到这一点。一、定义事件类作为事件的发布者,需要定义所发布的事件的类:public class MessageEvent { private String msg

2022-02-08 21:45:18 462 1

原创 深入源码分析Android插件化原理

前言插件化技术最初源于免安装运行 apk 的想法,这个免安装的 apk 就可以理解为插件,而支持插件的 app 我们一般叫宿主。宿主可以在运行时加载和运行插件,这样便可以将 app 中一些不常用的功能模块做成插件,一方面减小了安装包的大小,另一方面可以实现 app 功能的动态扩展。插件化的开源框架插件化发展到现在,已经出现了非常多的框架,下表列出部分框架:特性DynamicAPKdynamic- load-apkSmallDroidPluginRePluginVirtualAPK

2022-02-07 21:33:43 956 1

原创 深入分析Android Handler消息机制

概述Handler是Android消息机制的上层接口。通过它可以轻松地将一个任务切换到Handler所在的线程中去执行。通常情况下,Handler的使用场景就是 更新UI。Handler的使用在子线程中,进行耗时操作,执行完操作后,发送消息,通知主线程更新UI。public class Activity extends android.app.Activity { private Handler mHandler = new Handler(){ @Override

2022-01-26 21:11:34 1458

原创 深入理解Glide源码:三条主线分析-Glide-执行流程

Glide流程分析说到图片加载框架,大家最熟悉的莫过于Glide了,但我却不推荐简历上写熟悉Glide, 除非你熟读它的源码,或者参与Glide的开发和维护。然而很多小伙伴对于Glide的流程及其源码解读总是无从下手,本篇就从三条主线来分析一下Glide流程及源码!第一条主线加入队列流程:RequestManager with = Glide.with(this);RequestBuilder<Drawable> load = with.load(url);load.into(iv)

2022-01-25 21:29:26 406 1

原创 Android界面性能优化必读

一. Android渲染知识1.1 绘制原理Android系统要求每一帧都要在 16ms 内绘制完成,平滑的完成一帧意味着任何特殊的帧需要执行所有的渲染代码(包括 framework 发送给 GPU 和 CPU 绘制到缓冲区的命令)都要在 16ms 内完成,保持流畅的体验。这个速度允许系统在动画和输入事件的过程中以约 60 帧每秒( 1秒 / 0.016帧每秒 = 62.5帧/秒 )的平滑帧率来渲染。如果你的应用没有在 16ms 内完成这一帧的绘制,假设你花了 24ms 来绘制这一帧,那么就会出现掉

2022-01-24 21:46:53 337 1

原创 一定能看懂的 Retrofit 最详细的源码解析

前提只有了解了框架的原理才能更好的使用她,才能定位问题的根本。写这篇文章的也是为了自我的学习和提升。其实看源码就跟看书一样,看了这么多本书有什么用呢,其实不然,这些知识已经潜移默化的影响了你的思维。你之后在阅读源码时,会发现能更快的上手了。引用别人的一句话:当我还是个孩子时吃的很多食物,大部分已经一去不复返而且被我忘掉了,但可以肯定的是,它们中的一部分已经长成我的骨头和肉友情提醒1.这篇文章主要讲retrofit如何request 和 response 2.不会详细到每个api 3.文章会以

2022-01-21 21:36:57 704 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除