![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
源码分析
文章平均质量分 73
通过一些源码学习增强技术理解
Gerry_Liang
我很懒,还没有简介
展开
-
谈谈我对Gson源码的理解
fill:#333;GsonBoundFieldfromJson()可能存在递归调用栈溢出的地方getBoundFields() 获取该类所有字段createBoundField() 每个字段去找自己的getAdapter()read()construct() 反射创建对象遍历每个字段调用 read() 赋值每个BoundField对应的TypeAdapter处理 read()GsonBoundField注意蓝色区域, 这里有可能存在递归调用的风险, 我们来举例说明。原创 2024-02-25 22:01:29 · 964 阅读 · 0 评论 -
他山之石(2)—— Timber 如何实现默认打tag的
在使用Timber的时候发现了一些体验较好的地方,逐一分析下是怎么实现的。打印如下: 这个MainActivity是如何打印出来的呢?普通打印, 需要输入tag。原创 2024-01-15 00:30:38 · 489 阅读 · 0 评论 -
谈谈我对Retrofit源码的理解
square/retrofit Github地址 最新版本从这里获取!Retrofit 是一款由 Square 公司开发的用于 Android 和 Java 应用程序的网络请求库,旨在简化 HTTP 网络请求的过程,Retrofit 最初是在 2013 年开源发布的,已经风靡了10年。其优点如下简化网络请求的过程:Retrofit 可以根据 API 接口定义文件自动生成网络请求代码,从而避免了手动创建网络请求代码的繁琐工作。方便处理网络请求。原创 2023-03-05 23:00:50 · 387 阅读 · 0 评论 -
Rxjava线程切换原理终于在2023年有了答案。
虽然项目中有用到Rxjava但是从来没有花功夫研究过所以对这里一直是懵逼状态,面试的时候也是很恐惧这方面的提问,但是Rxjava线程切换原理一直是面试必问的问题,与其心存侥幸不如直面恐惧,到了2022年,终于对这个问题有了一个完整的理解,如有理解偏差,还请指出。// 本次源码分析基于rxjava 3.0 // 使用最新的rxjava版本看这里 https://github.com/ReactiveX/RxAndroiddependencies { implementation 'io.re原创 2022-01-03 23:17:01 · 1853 阅读 · 1 评论 -
Mac AOSP下载
打开这个repo文件, 替换REPO_URL为清华大学的镜像文件。等到100%就说明系统源码下载完了。原创 2021-08-27 21:41:22 · 382 阅读 · 0 评论 -
【Flutter源码学习】Dart和Android通信原理
本篇源码分析基于以下环境[✓] Flutter (Channel stable, 2.2.3, on macOS 11.4 20F71 darwin-x64, locale zh-Hans-CN) • Flutter version 2.2.3 at /Users/liangchaojie/Documents/flutter • Framework revision f4abaa0735 (6 weeks ago), 2021-07-01 12:46:11 -0700 •原创 2021-08-14 18:10:05 · 297 阅读 · 0 评论 -
聊聊 Looper中的 用户态、内核态、IO多路复用
做Android开发的小伙伴一定都熟悉Android的消息循环机制(Looper MessageQueue Handler), 相信也一定知道Looper是一个死循环,循环中 MessageQueue 不停地去拿消息处理,如果拿不到就阻塞当前主线程执行,下面重温一下这块的代码Looper.javapublic static void loop() { //... 省略无关代码 for (;;) { // 这里我把官方注释放这里了,next方法执行过程中可能会发生阻塞原创 2021-08-08 23:15:25 · 419 阅读 · 0 评论 -
基于 Android Q 10.0 系统 makeVisible源码解析
这篇文章需要搭配这篇博客看更有味道基于 Android Q 10.0 系统 Activity启动流程探索,读了本篇你可以明白为什么onCreate方法中的view宽高是0.文章目录1 ResumeActivityItem.java2 ActivityThread.java3 Activity.java3.1 Activity.java3.2 Window.java4 WindowManagerImpl.java5 WindowManagerGlobal.java6 ViewRootImpl.java .原创 2020-06-08 17:26:12 · 721 阅读 · 0 评论 -
基于 Android Q 10.0 系统 setContentView源码解析
setContentView源码解析文章目录1 MainActivity.java2 AppCompatActivity.java3 AppCompatDelegate.java4 AppCompatDelegateImpl.java第一阶段4.1 Activity.java4.2 ActivityThread.java4.3 PhoneWindow.java第二阶段4.4 LayoutInflater.java4.5 Activity.java ---> mPrivateFactory4.6 L原创 2020-06-01 18:10:16 · 1030 阅读 · 0 评论 -
基于 Android Q 10.0 系统 LayoutInflater源码解析
文章目录1 Context.java2 Activity.java3 ContextThemeWrapper.java4 ContextWrapper.javaBack 2 Activity.java5 ActivityThread.javaBack 3 ContextThemeWrapper.java6 ContextImpl.java7 SystemServiceRegistry.javaBack 3 ContextThemeWrapper.java8 PhoneLayoutInflater.java原创 2020-05-30 00:20:47 · 296 阅读 · 0 评论 -
基于 Android Q 10.0 系统 Activity启动流程探索
基于 Android Q 10.0 系统 Activity启动流程探索文章目录1 MainActivity.java2 Activity.java3 Instrumentation.java4 ActivityTaskManager.java5 ActivityTaskManagerService.java6 ActivityStarter.java7 RootActivityContainer.java8 ActivityStack.java9 ActivityStackSupervisor.原创 2020-05-25 15:02:37 · 661 阅读 · 0 评论 -
ViewPager设置setAdapter不会重新创建Fragment的问题
刚开始一顿面向谷歌编程,各种网友提供的思路都试了一遍发现都无效,最后找到了下面这篇博客终于解决我的问题解决ViewPager展示Fragment时重新设置setAdapter不会重置Fragment的bug我遇到的问题:创建了新的fragment也设置了setAdapter但是结果还是出现旧的fragment解决方法如下:1在你的PageAdapter中增加下面一个方法public...原创 2019-09-09 21:47:11 · 2868 阅读 · 0 评论 -
HashMap和HashTable
关于这个问题真的是老生常谈,面试题基本上必考,那么就来通过源码理解下两者的异同。HashMapHash table based implementation of the <tt>Map</tt> interface. This implementation provides all of the optional map operations, and pe...原创 2017-10-22 11:07:15 · 332 阅读 · 2 评论 -
requestPermissions和checkSelfPermission源码解析
Android在6.0之前采用的是静态权限,什么是静态权限呢?就是你安装的时候会询问你是否允许App内的所有权限,只要有一个拒绝,那么这个App你就无法安装了;6.0开始,采用动态权限管理,也就是说你的App可以先安装,具体使用什么权限的时候再去请求就好了,默认权限是全部禁止的所以我学Android时候的老师最喜欢把 compileSdkVersion 从23写成22,就是觉得动态申请权限过于麻烦,原创 2017-10-31 21:58:22 · 18577 阅读 · 1 评论 -
getIntent()源码分析
Android实际开发中我们经常需要使用Intent传值到下一个页面,例如A页面携带name,age传值给B页面,B页面取值的代码如下所示setContentView(R.layout.activity_main);String name=getIntent().getStringExtra("name");int age=getIntent().getIntExtra("age",0);一个页原创 2017-11-05 15:12:34 · 2659 阅读 · 0 评论 -
java反射中的getDeclaredXX和getXX方法
在学习java反射中我们常常会遇到下面三对双胞胎: getDeclaredConstructors和getConstructors getDeclaredMethods和getMethods getDeclaredFields和getFields看起来三者很类似,经常使用起来我们不知道该用谁原创 2017-12-05 23:27:29 · 1825 阅读 · 0 评论 -
Android事件分发机制(小白学习篇)
最近在深入学习事件分发机制,一直被虐终于学有所成,特意把学后的总结记录下来,方便日后复习,也希望能帮助更多在事件分发上迷惑的人们。首先你需要知道事件分发的对象有:Activity,Window,ViewGroup和View 其次你需要知道什么是事件流:ACTION_DOWN开始,数量不定的ACTION_MOVE和ACTION_UP组成了一个完整的事件流如果以上两点你不知道,你可以先去学习下再来看原创 2018-01-30 22:11:24 · 392 阅读 · 0 评论 -
AsyncTask从精通到放弃(二)
时光荏苒,距离我上次写AsyncTask的文章已经过去快一年了AsyncTask从精通到放弃(一)那个时候的我只get到了它的使用规律但是没有研究过源码,最近在强化自己对于源码的理解能力,所以对其源码进行了研究,如果对AsyncTask不熟悉的朋友可以看完我上面的博客再看这篇文章我们一般使用AsyncTask的姿势如下: new AsyncTask<String, Void,...原创 2018-03-30 00:23:39 · 472 阅读 · 0 评论 -
Collection源码学习——ArrayList
(以下源码建立在JDK 10版本基础上)ArrayList这个类用的实在是太频繁了,除基本类型之外应该算是最常用了吧,但是一直用过却一直不曾研究过里面的源码,这是程序员的大忌,用什么就要研究什么,否则只是代码工匠谈不上代码师。在开始ArrayList学习之前,我一直有个疑问,就是数组可以动态扩容吗?我们知道java声明数组时,必须指明数组的个数或者列举出所有的元素(等于告诉编译器自...原创 2018-08-05 21:52:19 · 360 阅读 · 3 评论 -
Collection源码之路(3)——HashMap 上篇
首先纠正一个错误,HashMap不属于Collection,而是属于Map,之所以本篇文章叫Collection源码之路,是为了和之前的文章呼应。之前的两篇文章介绍我的我们实际开发中用到最多的ArrayList或者结构简单的LinkedList,但是找工作面试问得最多的却是HashMap,我被问了不下6次吧,当我仔细阅读源码的时候才发现,这个数据结构真的是精髓中的精髓,一篇文章讲起来可...原创 2018-08-11 19:11:37 · 178 阅读 · 0 评论 -
Collection源码之路(2)——LinkedList
上篇文章讲到原创 2018-08-08 21:04:44 · 172 阅读 · 0 评论 -
Handler,Message,Looper,MessageQueue源码解析
好久不看源码了,心生畏惧,所以这一周抽出时间来看看Handler相关源码感谢下面几位博主的博客你真的懂Handler的消息机制吗?Android Handler机制(四)—Handler源码解析我们是如何使用Handler的?public class HandlerActivity extends AppCompatActivity { private TextView tex...原创 2018-11-11 15:46:27 · 201 阅读 · 0 评论 -
WindowManager前世今生
写上篇博客仿微信悬浮通知栏/横幅通知的时候对WindowManager充满了好奇,所以今天专门看了下源码,加深了我对于window的理解首先看下我整理的图片我们经常用到的addView其实就是ViewManager接口的一个方法,所以参数都是一致的public void addView(View view, ViewGroup.LayoutParams params);大家...原创 2018-02-24 13:38:45 · 251 阅读 · 0 评论 -
LinkedHashMap是如何实现访问排序的?
源码的核心是数据结构最近在读缓存图片框架的源码,一直不知道缓存是如何判断“LRU” (Least Recently Used)最近最少使用的,看了源码才知道核心是LRUCache类,这个类的核心其实是 LinkedHashMap类关于这个类的介绍,网上有很多资料介绍这个类的特性: 1 双向链表+哈希表 2 线程不安全 3 允许空的键或者值 4 有序有一篇博客原创 2018-03-09 22:13:57 · 8088 阅读 · 0 评论 -
如何查看Java中的native源码?
在java开发中我们经常会看源码对底层原理进行学习,大多数源码如下所示能让我们看到整个函数内部处理的过程: 但是有一些源码却是标明了native,在java中是找不到具体实现的native方法的具体实现是用C语言实现的,因为jdk就是用C语言编写的。当有一些需要和硬件打交道的方法,java是做不了的,于是它就偷懒声明一个native方法让c去写一个方法去和硬件打交道,c写好之后java直接调用即可原创 2017-10-15 22:14:28 · 14873 阅读 · 0 评论