
Android源码阅读笔记
文章平均质量分 94
对于Android开发人员,不管是做纯App应用的开发,还是系统的开发,在Android这条路上,如果想要走的更远,肯定绕不开的一个拦路虎就是android源码,而且从另外一方面来说,系统源码是众多最优秀的Android开发者的集萃,我们有必要静下心来熟读源码,领略其中风采的同时,提升自我。
itbird01
细节决定成败,专注决定高度
展开
-
Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(四)
LiveData使用观察者设计模式,视图作为观察者,数据作为被观察者,视图对于进行数据的观察,当数据发生变化时,可以主动通知视图,这本身是一个很简单类似OnClickListener的简单原理,但是难点在于,如何解决LiveData中由于需要实现通知,拥有了视图的引用,从而导致可能存在的内存泄露问题。原创 2023-05-04 06:45:00 · 2474 阅读 · 65 评论 -
Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(三)
LiveData 从实践到原理,源码阅读原创 2023-05-03 07:00:00 · 1100 阅读 · 25 评论 -
Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(二)
首先是LiveData数据结构定义,经过猜想,我们知道这块两个东西最重要,一个是数据容器的设定,一个是内部存储数据结构,我们这里通过泛型就可以实现/*** 自定义LiveData实现/*** 内部存储的数据结构*/ T data;/*** 构造函数} /*** set方法} /*** 直接在当前线程调用//todo 子线程执行的逻辑 } public T getValue() {} /*** 检测是否为主线程if(!} } }原创 2023-05-02 07:15:00 · 1029 阅读 · 18 评论 -
Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(一)
五一假期,第二节课,Jetpack组件LiveData从实践、源码阅读、原理解读几方面,我们一起来学习、探索、总结一下。原创 2023-05-01 07:30:00 · 1054 阅读 · 4 评论 -
Android Jetpack 从使用到源码深耕【ViewModel从实践到原理 】(四)
ViewModel使用以及源码分析ViewModel 、 onSaveInstanceState、持久化数据的使用场景总结ViewModel 与 onSaveInstanceState的异同对比原创 2023-04-30 07:15:00 · 1143 阅读 · 2 评论 -
Android Jetpack 从使用到源码深耕【ViewModel从实践到原理 】(三)
onSaveInstanceState与onRetainNonConfigurationInstance 的对比分析SaveStateHandle使用DemoSaveStateHandle源码原理分析原创 2023-04-29 07:15:00 · 1311 阅读 · 33 评论 -
Android Jetpack 从使用到源码深耕【ViewModel从实践到原理 】(二)
ViewModel的实现机制是,在内存中存储了相关的ViewModel的数据,借助 activity的相关周期方法onRetainNonConfigurationInstance 与 getLastNonConfigurationInstance的自动调用,实现了 ViewModel数据的存储和恢复。原创 2023-04-28 07:00:00 · 943 阅读 · 47 评论 -
Android Jetpack 从使用到源码深耕【ViewModel从实践到原理 】(一)
五一期间,我们来一起学习总结一下Jetpack的ViewModel组件,从使用、源码、经验来总结分析。老办法,在研究一个框架之前,先提出一些自己可以想到的问题,带着问题,有目标的去阅读源码,收货相信更多、更明确一些。ViewModel 是做什么的?ViewModel 如何使用?ViewModel 生命周期是怎么样的?ViewModel 数据是如何保存的?是通过文件吗?类似于SP的做法?原创 2023-04-27 07:00:00 · 2679 阅读 · 61 评论 -
Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(三)
在源码探索的过程中,大家是否发现了这样一个类。/**/**} }有小伙伴,是否看着很有趣又亲切呢?有趣在于这里即对一个对象的行为进行了接口抽象定义,同时也对这个对象的创建工厂,进行了工厂定义亲切在于,不管是去年我们在设计模式精讲系列课程里,还是在okhttp的源码探索,以及rxjava的源码探索中,发现这些第三方框架,几乎都使用了这样的封装方式,即:先将行为抽象,使外界面向接口编程,其次再将对象创建也抽象,使用工厂模式,进行对象创建。原创 2023-04-10 09:48:28 · 2752 阅读 · 62 评论 -
Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(二)
Room是对SQLite数据库的抽象,它提供了很多便利的API和注解等,简化了使用者使用数据库的方式。同时,Room提供了 LiveData、Rxjava的结合使用的组件,更加方便了开发使用。使用Room减少了很多sql模板代码的编写,整体使用上简单、明了了很多,尤其是结合Rxjava,可以直接实现主子线程的切换、流式业务代码操作的编写。原创 2023-04-07 10:28:53 · 2779 阅读 · 74 评论 -
Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(一)
本文,我们通过一个简单的sqlite应用实例,引入了Room,知道了Room使用的便捷和好处。然后用Room的方式,重新实现了应用实例中的场景,在这个过程中,我们结合自己已有的知识体系,从使用代码入手,对Room的实现原理,进行了猜想和简单的验证。Room是否是这样做的?下一章节,我们一边阅读源码,一边去看一下。原创 2023-04-06 14:09:58 · 2272 阅读 · 62 评论 -
Android Jetpack 从使用到源码深耕【调度任务组件WorkManager 从实践到原理 】(三)
上面的调用,从worker的提交,到job的具体执行,绕了一圈,我们画个图梳理一下。SerialExecutor的知识应用,当我们想要控制一个任务队列中的任务,串行执行时,可以使用这样的实现方案,但是,我们需要知道,这样有一个坏处就是,达不到并发的目的了。Provider可以用于初始化init函数的调用,当我们在设计一些框架时,为了简化使用者的调用步骤,可以使用Provider的方案。原创 2023-04-04 14:08:50 · 2940 阅读 · 59 评论 -
Android Jetpack 从使用到源码深耕【调度任务组件WorkManager 从实践到原理 】(二)
本文,我们对于WorkManager的初始化、任务入队的源码进行了深入的解读,学到了WorkManager的初始化,和MMKV、VirtualAPK、LeakCanary这些第三方框架源码一样,都使用了Provider初始化的设计方案,发现这真是一个好处,就是使用了manifest注册时,PackageParse会解析其中的四大组件,然后在AMS中进行信息初始化,那么此时Provider就会进行初始化,所以使用了这个特性。原创 2023-04-03 11:19:46 · 848 阅读 · 54 评论 -
Android Jetpack 从使用到源码深耕【调度任务组件WorkManager 从实践到原理 】(一)
本文,我们对Jetpack的调度任务组件WorkManager ,由使用入手,对其源码进行深入学习、总结一下。原创 2023-04-01 11:08:27 · 2056 阅读 · 58 评论 -
Android Jetpack 从使用到源码深耕【生命周期感知组件Lifecycle从实践到原理 】(二)
按照标准观察者模式设计思想,首先要定义通知接口看到这里,lifecycle源码,基本都已讲完。我们来总结一下1)lifecycle大体是,通过观察者设计模式,实现activity、fragment等生命周期的具体感知、通知的2)lifecycle实现方案上,对于API>=29采用的最新的API ActivityLifecycleCallbacks 来感知所有的生命周期。原创 2023-03-31 09:51:22 · 1393 阅读 · 43 评论 -
Android Jetpack 从使用到源码深耕【生命周期感知组件Lifecycle从实践到原理】(一)
本文,我们首先一个简单的实际代码例子入手,开始说明lifecycle被引入的背景,进而我们使用lifecycle实现了简单的需求,篇幅所限,lifecycle的自我实现以及源码探索,我们下篇文章继续探索。原创 2023-03-30 10:05:14 · 899 阅读 · 36 评论 -
Android源码面试宝典之JobScheduler从使用到原理分析(五)【JobIntentService】
1)JobIntentService在android8.0以上,是通过JSS+JSC实现的后台任务执行管理,任务会交由AsyncTask后台执行;在android8.0以上,是通过PowerManager来获取了wakeup锁,实现了后台任务的执行管理,任务同样也会交由AsyncTask后台执行;2)JobIntentService的任务后台执行,是放置于线程池的,所以是多线程并发执行;原创 2023-03-29 13:47:31 · 1005 阅读 · 30 评论 -
Android源码面试宝典之JobScheduler从使用到原理分析(四)【JobScheduler、StateController 】
本文,我们主要对IntentService的替代API接口JobScheduler,从简单的使用入手,然后逐步对内部的实现源码细节进行分析。JobSchedulerService是一个关键的系统服务,在android系统启动时,作为核心服务已经启动。我们通过JobScheduler提交的JobInfo,在JobSchedulerService中,会转换为JobStatus,然后交由各个状态监控器StateController去监控。原创 2023-03-28 11:04:01 · 2153 阅读 · 72 评论 -
Android源码面试宝典之JobScheduler从使用到原理分析(三)【JobService、JobInfo】
本文,从Job任务的创建,到如何与JSC(JobServiceCotext)关联,到具体任务的绑定、执行进行了源码探索,相信大家到现在为止,对于JobScheduler的庐山真面目,脑海中已经有了些许自己的轮廓。但是,我们也知道,目前为止,仅仅是任务的创建、任务的执行原理我们了解、学习到了,但是任务何时执行的?约束条件如何监控job的?这些还未讲到。别着急,下一节,我们一起继续探索源码,解析其中的奥秘。原创 2023-03-27 11:25:49 · 1108 阅读 · 49 评论 -
Android源码面试宝典之JobScheduler从使用到原理分析(二)【JSS的启动】
Android源码面试宝典之JobScheduler从使用到原理分析(二)【JSS的启动】我们从使用代码入手,通过阅读JobScheduler源码,来开始对于其原理,进行深入解读。原创 2023-03-24 10:07:08 · 2197 阅读 · 61 评论 -
Android源码面试宝典之JobScheduler从使用到原理分析(一)【JobScheduler的使用】
我们先看一下google官方,对于这个API框架有哪些接口和类?可以看到主要有JobInfo、JobScheduler,其中 JobInfo有内部类Builder,那么看这个设计,应该是可以通过建造者模式,去外部构建一个 JobInfo实体对象,然后我们看到JobScheduler有schedule方法,那么应该就是把这个JobInfo交由JobScheduler去执行即可。原创 2023-03-23 16:57:24 · 2027 阅读 · 72 评论 -
【Android源码面试宝典】MMKV从使用到原理分析(二)
MMAP原理MMKV原理mmkv源码原创 2023-03-01 09:42:49 · 3087 阅读 · 151 评论 -
【Android源码面试宝典】MMKV从使用到原理分析(一)
去年,我们写过一篇文章,对于android原生提供的key-value存储API SharePreference,进行了,进行了深入的探索、总结。但是之前的文章,我们仅仅指出了问题,没有给大家提供解决方案,也就是说,SharePreference既然不建议使用,那么我应该使用啥?mmkv原理mmkv使用原创 2023-02-28 10:36:40 · 4350 阅读 · 116 评论 -
Retrofit源码分析&实践(八)【Retrofit CallAdapter的引入】
Retrofit+Rxjava大家知道如何使用吗?添加CallAdapterFactory支持原创 2023-02-17 09:55:02 · 3285 阅读 · 153 评论 -
Retrofit源码分析&实践(七)【Retrofit ConvertFactory的功能实现】
Retrofit实践系列课程到现在,大家是否发现还有两个关键问题,或者准确一点,应该描述为两个功能并未实现一个是Gson数据的解析,我们是直接在返回里面使用了Gson解析的,并未使用到最初框架设计的时候,加入的ConvertFactoryRetrofitCall中数据的解析,其实包含两方面,一方面是gson的转换,一方面是code的处理,这部分,明显不应该写死在这里,因为服务端可能返回xml数据、gson数据,另外code的不同,你封装一个框架是给其他人去用的,code怎么能写死在解析里面呢?原创 2023-02-15 17:01:35 · 4770 阅读 · 119 评论 -
Retrofit源码分析&实践(六)【Retrofit 多BaseUrl问题解决】
本节到这里就基本结束了,我们回顾一下。解决retrofit 多baseUrl的动态解决方案就是RetrofitManager作为单例类,使用map保存baseurl-retrofit的一一对应保存为了解决需要记忆baseurl-retrofit一一对应关系的问题,我们引入自定义注解BaseUrl,给需要的接口类,直接添加这个注解。原创 2023-02-01 09:48:06 · 6036 阅读 · 116 评论 -
Retrofit源码分析&实践(五)【Retrofit Call等问题解决】
篇幅所限,本文我们先就其中四个问题进行了解决,过程中,也对之前实现的诸多代码进行了优化。Create接口,使用泛型,面向所有请求接口注解的处理封装到ServiceMerthod方法中Call对象的封装和转换返回数据不规范的解决方案。原创 2023-01-31 11:31:46 · 758 阅读 · 62 评论 -
Retrofit源码分析&实践(四)【Retrofit 实现请求和返回】
由上一节,我们基于retrofit使用代码入手,搭建了整体的框架,但是为了简化,一步一步来,我们首先使用自己搭建的retrofit实现基本的请求和返回,那么我们暂时忽略convertfactory和callback的转换,本节我们先直接使用okhttp的call,直接返回okhttp的response,实现基本的retrofit核心功能代码,具体功能点有接口动态代理创建对象注解的处理,拼接url和请求参数基于okhttp实现基本的请求本章,我们一起来基于上节搭建的Retrofit框架,实现核原创 2023-01-20 09:40:04 · 777 阅读 · 52 评论 -
Retrofit源码分析&实践(三)【Retrofit 代码框架搭建】
我们运行一下,不出所料,肯定会崩溃的。因为在上面的代码编写中,我们只是搭建框架,并未填充任何实现,有几件重要的事情,都没有去做retrofit的builder模式创建中,okhttp并未使用convertFactroy接口并未填充实现retrofit.create方法我们只是创建一个空壳,并未去真正实现注解并未处理,因为我们最简单的,要处理注解,从而生成请求的完整url返回的数据封装处理,也就是从okhttp的call,到自己封装的call对象的转换,并未做处理。原创 2023-01-18 09:45:14 · 578 阅读 · 8 评论 -
Retrofit源码分析&实践(二)【Retrofit 免费的api测试工具引入】
工欲善其事必先利其器,我们开始具体的retrofit源码探索与实践之前,需要找一个免费的测试api接口,因为我们知道,不管使用okhttp,还是retrofit,你都需要一个api测试服务器。原创 2023-01-17 10:18:21 · 1649 阅读 · 50 评论 -
Retrofit源码分析&实践(一)【从使用入手分析源码】
从使用入手,到每个关键步骤的源码实现原理猜测、结合实际retrofit源码验证,大家是否已经基本了解的retrofit的整体框架和源码。接下来几节课,我们开始自我实现一个retrofit框架,还是那句老话,这里小编明确,去使用自己已知的知识,结合我们之前讲过的设计模式相关知识,实现并不是关键,毕竟已有的框架、已有的知识总结一大堆,我们并非是要花费时间重复造轮子,但是借助这个自我实践过程,去进行自我的知识沉淀、累加,进而吃透相应框架,这才是最关键的。原创 2023-01-16 15:26:57 · 745 阅读 · 58 评论 -
RxPermissions从基本使用到原理解读
在android 6.0中也同时添加了权限组的概念,若用户同意组内的某一个权限,那么系统默认app可以使用组内的所有权限,无需再次申请。我们一般申请权限,是怎么做的呢?先建一个权限判断处理的类在相应的activity中(Note:为什么我这里没有包含fragment呢?大家先想一下,后续我们揭晓),做如下权限申请这个使用上有两处不方便有了这个前提,我们看一下RxPermissions使用的代码是否特别简单呢?是否解决了上面我们所说的两个问题呢?第二个问题肯定是解决了,第一个问题,是否已经解决了呢?我原创 2023-01-05 09:48:19 · 790 阅读 · 31 评论 -
Rxjava源码分析&实践(八)【源码环节:Rxjava 常见创建操作符原理解析】
总体来说, Rxjava的常见操作符分为创建操作符、转换操作符、过滤操作符、合并操作符、 条件操作符、功能操作符.我们常见的创建型操作符有 create、 just 、fromArray、interval、range 、timer。1.2 源码我们看一下create函数源码看到包装为了ObservableCreate对象,继续看一下source是上游的observable,也就是我们刚开始调用函数的crreate中创建的对象所以这里绕回到开头,也就是走到订阅流的 ObservableOnSubsc原创 2023-01-04 10:18:17 · 1009 阅读 · 14 评论 -
Rxjava源码分析&实践(七)【实践环节:线程切换功能实现】
实现线程切换功能之前,通过一个实例,我们先看一下rxjava线程切换功能的使用代码。**需求:**我们自己在实现一个图片下载然后展示到imageview上的需求的时候,不可避免的,肯定会将下载图片的网络操作,放到线程里面执行,然后有了执行结果之后,通过handler切换回主线程,进行UI渲染展示。/*** 普通的下载图片,显示到imageview的方法} });} /*** 下载图片功能函数** @returntry {= null) {try {原创 2022-12-31 08:58:10 · 681 阅读 · 19 评论 -
Rxjava源码分析&实践(六)【实践环节:map操作符功能实现】
目前为止,我们实现了Rxjava的框架搭建、mao操作符的实现,在这个过程中,大家发现了是否对之前Rxjava原理一章的知识有了更加深入的感悟呢?篇幅所限,本文没有带着大家一起去画流程图,建议大家在实现前 or 实现后,去画一下,相信收获肯定更多。原创 2022-12-30 15:33:25 · 2826 阅读 · 73 评论 -
Rxjava源码分析&实践(五)【实践环节:Rxjava整体框架的实现】
上一章节,我们从简单的Rxjava使用入手,深入学习探索了Rxjava原理,也知道了Rxjava最重要的几个功能,,接下来我们就一步一步的结合源码+实践,来实现这些核心功能。本节,我们一起来实现Rxjava的响应式编程的功能,其实就是借助观察者模式实现一对一的通知功能。老办法,在实现一个功能之前,那么我们先去基于自己已有的知识体系,去分解、猜想功能实现的原理,然后再一步一步的去实现它,过程中,对比Rxjava源码,可以进行一一比对,看自己想的,和框架本身有何异同。原创 2022-12-29 15:30:43 · 613 阅读 · 0 评论 -
Rxjava源码分析&实践(四)【RxJava基本原理分析之触发流】
整个过程,分为构建流、订阅流、触发流。从左到右执行不同的操作符的过程,其实很简单,就是根据不同的操作符,对原始的 observable进行逐层包装,这里可以看出,每层的节点 N* 就持有了上一层的observable。从右到左的 subscribe 调用过程,这个过程中,每个observable内部的subscribeActual执行两个关键操作,一个是对自己已有的observer进行一层重新包装,另外一个就是使用前面节点的observable,订阅包装好的observer。原创 2022-12-28 08:45:51 · 681 阅读 · 25 评论 -
Rxjava源码分析&实践(三)【RxJava基本原理分析之订阅流】
本节,我们从Rxjava使用代码入手,去结合自己已有的知识体系,加查阅部分源码验证的方式,来一起探索一下Rxjava实现的基本原理。为了本文原理分析环节,可以被更多的人理解、学习,所以小编从初学者的角度,从使用入手,一点点的分析了其中的源码细节、思想,建议大家随着本文的章节步骤,一步一步的来阅读,才能更快、更好的理解Rxjava的真正的思想精髓,也为我们之后的实践课程留一个好的底子。原创 2022-12-27 07:52:48 · 1077 阅读 · 14 评论 -
Rxjava源码分析&实践(二)【RxJava基本原理分析之构建流】
本节,我们从Rxjava使用代码入手,去结合自己已有的知识体系,加查阅部分源码验证的方式,来一起探索一下Rxjava实现的基本原理。为了本文原理分析环节,可以被更多的人理解、学习,所以小编从初学者的角度,从使用入手,一点点的分析了其中的源码细节、思想,建议大家随着本文的章节步骤,一步一步的来阅读,才能更快、更好的理解Rxjava的真正的思想精髓,也为我们之后的实践课程留一个好的底子。原创 2022-12-26 07:53:15 · 900 阅读 · 8 评论 -
Rxjava源码分析&实践(一)【RxJava的基本使用】
写在文章开头,小编明确,去使用自己已知的知识,结合我们之前讲过的设计模式相关知识,实现某个开源的三方框架,并不是目的,毕竟已有的框架、已有的知识总结一大堆,我们并非是要花费时间重复造轮子,而是借助这个自我实践过程,去进行自我的知识沉淀、累加,进而吃透相应框架,这才是最关键的。当然,也有另外一方面原因,大家发现我们一路走来,从刚开始的设计模式相关课程,到开源框架Eventbus、Butterknife、Rxjava、Okhttp、Glide,这些框架哪个不是很经典的,也许之前你怀疑过自己,但是当依靠自己已有知原创 2022-12-25 10:19:43 · 856 阅读 · 16 评论