Android
文章平均质量分 95
jthou20121212
这个作者很懒,什么都没留下…
展开
-
okhttp 源码分析
之前分析了 okhttp 的缓存拦截器 CacheInterceptor 的实现机制,这次再来详细分析一下 okhttp 的工作流程和其他拦截器。先看一下工作流程(本文基于 4.9.3)原创 2022-08-19 16:09:13 · 1149 阅读 · 2 评论 -
SharedPreferences 源码分析
SharedPreferences 是系统提供的一个适合用于存储少量键值对数据的持久化存储方案,特点是 API 比较简单使用比较方便,但它也有一些缺陷如果使用不当可能会导致卡顿甚至是 ANR 并且 SharedPreferences 不支持多进程...原创 2022-07-05 16:34:19 · 462 阅读 · 0 评论 -
View 工作流程
任何控件的展示都是通过 WindowManager.addView 来实现的并且 WindowManager 是一个接口真正的实现是 WindowManagerImpl 它又直接调用了 WindowManagerGlobal 的 addView 方法在这个方法里创建了 ViewRootImpl 它是所有控件的抽象父控件,它没有不是继承自 View 但是实现了 ViewParent 接口是 DecorView 的 parent,在 Activity 中通过 setContentView 方法传入的布局就是设置原创 2022-06-29 18:25:38 · 565 阅读 · 0 评论 -
Android 事件分发
所谓事件分发,就是对MotionEvent的分发过程,当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发过程。引用一个《Android开发艺术探索》里的概念: 同一个事件序列是指手指接触屏幕的那一刻起,到手指离开屏幕的那一刻结束,在这个工程中所产生的一系列事件,这个事件序列以down事件开始,中间含有数量不定的move事件,最终以u...原创 2018-04-21 12:28:00 · 224 阅读 · 0 评论 -
Savedstate 源码分析
Android 应用在被进程可通过 onSaveInstanceState-onRestoreInstanceState 保存一些必要数据用于在页面重建时恢复页面 savedstate 对此进行了封装,它与 ViewModel 的区别:SavedStateHandle 的引入使得开发者无需直接使用 onSaveInstanceState(Bundle) 等方法来完.原创 2022-05-03 17:21:50 · 392 阅读 · 0 评论 -
ViewModel 源码分析
ViewModel 是 Jetpack 组件之一,能力是维护数据保证在因配置更改导致的页面重建时 ViewModel 可以存活下来,另外使用 ViewModel 可以很方便的在一个 Activity 的多个 Fragment 中共享数据原创 2022-04-30 16:56:50 · 1446 阅读 · 0 评论 -
LiveData 源码分析
LiveData 是 Jetpack 的组件之一,是一个可感知目标生命周期并且可被观察的数据容器,当容器内数据变化时会根据观察者是否处于活跃状态回调最新数据给观察者,当观察者从非活跃状态变为活跃状态时同样会回调最新数据给观察者,并且当所属组件生命周期变为 DESTROYED 状态时会自动移除观察者避免内存泄漏,下面来分析一下 LiveData 的源码提示:以下是本篇文章正文内容,下面案例可供参考原创 2022-04-16 16:14:04 · 2199 阅读 · 0 评论 -
Retrofit 源码分析
Retrofit 是 square 公司出品的基于 okhttp 的适用于 Android 和 JVM 的类型安全的 HTTP 客户端,它对网络请求进行了封装真正发起网络请求的还是 okhttp 拿到响应之后再转发给 retrofit原创 2022-04-01 01:02:58 · 82 阅读 · 0 评论 -
Lifecycle 源码分析
前言Lifecycle 是 Jetpack 的一员同时也是 LiveData 和 ViewModel 的基础,之前只是看过大概原理,今天来细读一下源码二、主要成员LifecycleOwner 是一个接口用于被观察的组件实现,唯一一个方法用于返回一个 Lifecycle 对象,实现它的对象表示具有生命周期Lifecycle 是一个抽象类,三个抽象方法分别用于添加、移除观察者和获取组件(具.原创 2022-03-19 15:46:06 · 3165 阅读 · 0 评论 -
Android 屏幕刷新机制
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言Android 4.1 Jelly Bean 推出了 Project Butter 用于解决 Android 系统一直以来的 UI 流畅性问题。引入了三个核心元素,即VSYNC、Triple Buffer和Choreographer。其中,VSYNC是理解Project Buffer的核心。VSYNC是Vertical Synchronization(垂直同原创 2022-03-03 00:10:40 · 1260 阅读 · 0 评论 -
Android MultiDex 源码分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、启动 MultiDexAndroid 5.0 和之后的版本Android 5.0 之前的版本二、MultiDex 的限制三、在主 dex 文件中包含必要的类四、源码分析二、使用步骤1.引入库2.读入数据总结前言App 在迭代过程中功能越来越丰富,代码量越来越多就会遇到一个构建错误表示方法数超出 65536 出现这个问题的原因是 dex 文件中对方法数的索引是 short 类型。在计算机科学领域,术语 K 表示1024(原创 2022-02-02 18:24:22 · 2852 阅读 · 0 评论 -
Android 混淆
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、ProGuard、DX、D8、R8二、使用步骤1.引入库2.读入数据总结前言Android 应用在发布时一般都会做代码混淆,具体就是在 build.gradle 中配置minifyEnabled true作用一是增加反编译的难度,二是缩减应用大小,下面来看一下混淆的具体原理提示:以下是本篇文章正文内容一、ProGuard、DX、D8、R8在上面 Android 打包流程图中会把项目和依赖库中的 Clas原创 2022-01-24 15:43:09 · 2176 阅读 · 0 评论 -
关于 Toast 的两个问题分析和解决方案
一、WindowManager.BadTokenExceptionToast 在 Android API 25 上有几率会抛出这个异常 override fun onCreate(savedInstanceS原创 2022-01-02 18:14:50 · 1687 阅读 · 0 评论 -
Glide 加载图片流程和缓存机制(下)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言总结前言上篇可能因为字数限制不能继续编辑了所以分为了两篇提示:以下是本篇文章正文内容上篇说到 com.bumptech.glide.load.engine.DataCacheGenerator#startNext 这里会拿到多个ModelLoader 第一个是 ByteBufferFileLoader 它的 DataFetcher 是 ByteBufferFetcher 看下它的 loadData publ原创 2021-12-20 14:37:14 · 1692 阅读 · 0 评论 -
Glide 加载图片流程和缓存机制(上)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、Glide 缓存1. 内存缓存2. 磁盘缓存二、源码分析2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。本文基于 Glide 4.8.0一、Glide 缓存Glide 的缓存机制非常精细范围内存缓存和磁盘缓存,内存缓存又包括活动资源 (Active Resources) 和内存缓原创 2021-12-20 14:36:47 · 279 阅读 · 0 评论 -
okhttp 缓存分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2021-11-05 17:55:05 · 210 阅读 · 0 评论 -
ArrayMap 源码分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、ArrayMap 是什么 ?二、源码分析1. 主要成员2. 缓存机制2.1 freeArrays2.1 allocArrays总结一、ArrayMap 是什么 ?ArrayMap 跟 HashMap 一样实现了 Map 接口所以也是存储键值对结构的数据容器,但是存储元素的方式不 HashMap 不太一样,ArrayMap 使用两个数组,一个 int 数组用于保存所有 key 的 hash 值,一个 Object 数组保存所原创 2021-10-08 16:31:04 · 133 阅读 · 0 评论 -
SparseArray 源码分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、SparseArray 是什么 ?二、源码分析1.delete2.put3.append4.get5.其他三、最后参考前言因为泛型擦除的原因基本数据类型不能作为泛型参数,如果需要就得使用它们的包装类就带来了装箱拆箱的开销,为了解决这个问题才有了 SparseArray 相关的几个类,SparseArray 比 HashMap 要慢一些是时间换空间的实现。提示:基于 Android SDK 28一、SparseAr原创 2021-10-06 15:11:46 · 142 阅读 · 0 评论