- 博客(283)
- 资源 (4)
- 收藏
- 关注

原创 Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(一)
五一假期,第二节课,Jetpack组件LiveData从实践、源码阅读、原理解读几方面,我们一起来学习、探索、总结一下。
2023-05-01 07:30:00
625
4

原创 Android Jetpack 从使用到源码深耕【ViewModel从实践到原理 】(四)
ViewModel使用以及源码分析ViewModel 、 onSaveInstanceState、持久化数据的使用场景总结ViewModel 与 onSaveInstanceState的异同对比
2023-04-30 07:15:00
806
2

原创 Android Jetpack 从使用到源码深耕【ViewModel从实践到原理 】(三)
onSaveInstanceState与onRetainNonConfigurationInstance 的对比分析SaveStateHandle使用DemoSaveStateHandle源码原理分析
2023-04-29 07:15:00
968
33

原创 Android Jetpack 从使用到源码深耕【ViewModel从实践到原理 】(二)
ViewModel的实现机制是,在内存中存储了相关的ViewModel的数据,借助 activity的相关周期方法onRetainNonConfigurationInstance 与 getLastNonConfigurationInstance的自动调用,实现了 ViewModel数据的存储和恢复。
2023-04-28 07:00:00
638
47

原创 Android Jetpack 从使用到源码深耕【ViewModel从实践到原理 】(一)
五一期间,我们来一起学习总结一下Jetpack的ViewModel组件,从使用、源码、经验来总结分析。老办法,在研究一个框架之前,先提出一些自己可以想到的问题,带着问题,有目标的去阅读源码,收货相信更多、更明确一些。ViewModel 是做什么的?ViewModel 如何使用?ViewModel 生命周期是怎么样的?ViewModel 数据是如何保存的?是通过文件吗?类似于SP的做法?
2023-04-27 07:00:00
1067
60
原创 Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(四)
LiveData使用观察者设计模式,视图作为观察者,数据作为被观察者,视图对于进行数据的观察,当数据发生变化时,可以主动通知视图,这本身是一个很简单类似OnClickListener的简单原理,但是难点在于,如何解决LiveData中由于需要实现通知,拥有了视图的引用,从而导致可能存在的内存泄露问题。
2023-05-04 06:45:00
583
65
原创 Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(二)
首先是LiveData数据结构定义,经过猜想,我们知道这块两个东西最重要,一个是数据容器的设定,一个是内部存储数据结构,我们这里通过泛型就可以实现/*** 自定义LiveData实现/*** 内部存储的数据结构*/ T data;/*** 构造函数} /*** set方法} /*** 直接在当前线程调用//todo 子线程执行的逻辑 } public T getValue() {} /*** 检测是否为主线程if(!} } }
2023-05-02 07:15:00
632
18
原创 有学生问我,重构是什么?我应该如何回答?
重构到底是什么?只是代码的推倒重新编码?还是有规则、有方法可寻?当然,结论肯定是有的,本文,我们通过一个简单的实例,来理解一下重构。
2023-04-11 10:38:21
465
63
原创 Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(三)
在源码探索的过程中,大家是否发现了这样一个类。/**/**} }有小伙伴,是否看着很有趣又亲切呢?有趣在于这里即对一个对象的行为进行了接口抽象定义,同时也对这个对象的创建工厂,进行了工厂定义亲切在于,不管是去年我们在设计模式精讲系列课程里,还是在okhttp的源码探索,以及rxjava的源码探索中,发现这些第三方框架,几乎都使用了这样的封装方式,即:先将行为抽象,使外界面向接口编程,其次再将对象创建也抽象,使用工厂模式,进行对象创建。
2023-04-10 09:48:28
1175
62
原创 Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(二)
Room是对SQLite数据库的抽象,它提供了很多便利的API和注解等,简化了使用者使用数据库的方式。同时,Room提供了 LiveData、Rxjava的结合使用的组件,更加方便了开发使用。使用Room减少了很多sql模板代码的编写,整体使用上简单、明了了很多,尤其是结合Rxjava,可以直接实现主子线程的切换、流式业务代码操作的编写。
2023-04-07 10:28:53
1068
73
原创 Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(一)
本文,我们通过一个简单的sqlite应用实例,引入了Room,知道了Room使用的便捷和好处。然后用Room的方式,重新实现了应用实例中的场景,在这个过程中,我们结合自己已有的知识体系,从使用代码入手,对Room的实现原理,进行了猜想和简单的验证。Room是否是这样做的?下一章节,我们一边阅读源码,一边去看一下。
2023-04-06 14:09:58
979
62
原创 Android Jetpack 从使用到源码深耕【调度任务组件WorkManager 从实践到原理 】(三)
上面的调用,从worker的提交,到job的具体执行,绕了一圈,我们画个图梳理一下。SerialExecutor的知识应用,当我们想要控制一个任务队列中的任务,串行执行时,可以使用这样的实现方案,但是,我们需要知道,这样有一个坏处就是,达不到并发的目的了。Provider可以用于初始化init函数的调用,当我们在设计一些框架时,为了简化使用者的调用步骤,可以使用Provider的方案。
2023-04-04 14:08:50
1607
59
原创 Android Jetpack 从使用到源码深耕【调度任务组件WorkManager 从实践到原理 】(二)
本文,我们对于WorkManager的初始化、任务入队的源码进行了深入的解读,学到了WorkManager的初始化,和MMKV、VirtualAPK、LeakCanary这些第三方框架源码一样,都使用了Provider初始化的设计方案,发现这真是一个好处,就是使用了manifest注册时,PackageParse会解析其中的四大组件,然后在AMS中进行信息初始化,那么此时Provider就会进行初始化,所以使用了这个特性。
2023-04-03 11:19:46
637
54
原创 【创作赢红包】字节面试遇到的算法题目(LRU缓存机制自我实现题目)
最近在字节的面试过程中,遇到了这样一道算法题目,其实很简单,就是我们经常用到的缓存机制-LRU(最近最少使用),今天有空,总结一下这次的这道面试题目。
2023-04-01 13:54:03
221
12
原创 Android Jetpack 从使用到源码深耕【调度任务组件WorkManager 从实践到原理 】(一)
本文,我们对Jetpack的调度任务组件WorkManager ,由使用入手,对其源码进行深入学习、总结一下。
2023-04-01 11:08:27
957
58
原创 Android Jetpack 从使用到源码深耕【生命周期感知组件Lifecycle从实践到原理 】(二)
按照标准观察者模式设计思想,首先要定义通知接口看到这里,lifecycle源码,基本都已讲完。我们来总结一下1)lifecycle大体是,通过观察者设计模式,实现activity、fragment等生命周期的具体感知、通知的2)lifecycle实现方案上,对于API>=29采用的最新的API ActivityLifecycleCallbacks 来感知所有的生命周期。
2023-03-31 09:51:22
1125
43
原创 Android Jetpack 从使用到源码深耕【生命周期感知组件Lifecycle从实践到原理】(一)
本文,我们首先一个简单的实际代码例子入手,开始说明lifecycle被引入的背景,进而我们使用lifecycle实现了简单的需求,篇幅所限,lifecycle的自我实现以及源码探索,我们下篇文章继续探索。
2023-03-30 10:05:14
625
36
原创 Android Jetpack从使用到源码深耕【开篇】
V4、V7、androidX,是Google的兼容包的一个进化史,androidX是最终的(目前的),最优整合兼容包Jetpack是一系列组件组成的一个套件,是用于帮助开发者遵循最佳做法、减少样板代码、减少适配代码、减少重复代码,从而让android开发者快速、高效率编码的一个工具盒,对于工具盒中的每项功能,你都可以单独拿起来使用(也就是在gradle中,可以单独引用每个组件)。jetpack历史
2023-03-29 16:24:02
976
36
原创 Android源码面试宝典之JobScheduler从使用到原理分析(五)【JobIntentService】
1)JobIntentService在android8.0以上,是通过JSS+JSC实现的后台任务执行管理,任务会交由AsyncTask后台执行;在android8.0以上,是通过PowerManager来获取了wakeup锁,实现了后台任务的执行管理,任务同样也会交由AsyncTask后台执行;2)JobIntentService的任务后台执行,是放置于线程池的,所以是多线程并发执行;
2023-03-29 13:47:31
639
30
原创 Android源码面试宝典之JobScheduler从使用到原理分析(四)【JobScheduler、StateController 】
本文,我们主要对IntentService的替代API接口JobScheduler,从简单的使用入手,然后逐步对内部的实现源码细节进行分析。JobSchedulerService是一个关键的系统服务,在android系统启动时,作为核心服务已经启动。我们通过JobScheduler提交的JobInfo,在JobSchedulerService中,会转换为JobStatus,然后交由各个状态监控器StateController去监控。
2023-03-28 11:04:01
939
72
原创 Android源码面试宝典之JobScheduler从使用到原理分析(三)【JobService、JobInfo】
本文,从Job任务的创建,到如何与JSC(JobServiceCotext)关联,到具体任务的绑定、执行进行了源码探索,相信大家到现在为止,对于JobScheduler的庐山真面目,脑海中已经有了些许自己的轮廓。但是,我们也知道,目前为止,仅仅是任务的创建、任务的执行原理我们了解、学习到了,但是任务何时执行的?约束条件如何监控job的?这些还未讲到。别着急,下一节,我们一起继续探索源码,解析其中的奥秘。
2023-03-27 11:25:49
811
49
原创 Android源码面试宝典之JobScheduler从使用到原理分析(二)【JSS的启动】
Android源码面试宝典之JobScheduler从使用到原理分析(二)【JSS的启动】我们从使用代码入手,通过阅读JobScheduler源码,来开始对于其原理,进行深入解读。
2023-03-24 10:07:08
1068
60
原创 Android源码面试宝典之JobScheduler从使用到原理分析(一)【JobScheduler的使用】
我们先看一下google官方,对于这个API框架有哪些接口和类?可以看到主要有JobInfo、JobScheduler,其中 JobInfo有内部类Builder,那么看这个设计,应该是可以通过建造者模式,去外部构建一个 JobInfo实体对象,然后我们看到JobScheduler有schedule方法,那么应该就是把这个JobInfo交由JobScheduler去执行即可。
2023-03-23 16:57:24
885
72
原创 【Android源码面试宝典】MMKV从使用到原理分析(一)
去年,我们写过一篇文章,对于android原生提供的key-value存储API SharePreference,进行了,进行了深入的探索、总结。但是之前的文章,我们仅仅指出了问题,没有给大家提供解决方案,也就是说,SharePreference既然不建议使用,那么我应该使用啥?mmkv原理mmkv使用
2023-02-28 10:36:40
3172
116
原创 日常编程中和日期相关的代码和bug
本文主要是Java中和日期时间相隔的几个常用代码函数代码,做了总结,希望在日常编码中,可以帮到大家。闰年平年的判断、延迟执行、定时执行
2023-02-24 17:23:52
1716
90
原创 【字节面试】Fail-fast知识点相关知识点
什么是Fail-fast机制?Hashmap是否拥有Fail-fast机制?ConcurrentModificationException异常原因和解决方法是什么?哪些你常用的数据结构是Fail-fast的,哪些不是?举例说明一下Enumeration与Iterator的异同?
2023-02-22 09:20:35
3188
143
原创 Retrofit源码分析&实践(八)【Retrofit CallAdapter的引入】
Retrofit+Rxjava大家知道如何使用吗?添加CallAdapterFactory支持
2023-02-17 09:55:02
2476
153
原创 Retrofit源码分析&实践(七)【Retrofit ConvertFactory的功能实现】
Retrofit实践系列课程到现在,大家是否发现还有两个关键问题,或者准确一点,应该描述为两个功能并未实现一个是Gson数据的解析,我们是直接在返回里面使用了Gson解析的,并未使用到最初框架设计的时候,加入的ConvertFactoryRetrofitCall中数据的解析,其实包含两方面,一方面是gson的转换,一方面是code的处理,这部分,明显不应该写死在这里,因为服务端可能返回xml数据、gson数据,另外code的不同,你封装一个框架是给其他人去用的,code怎么能写死在解析里面呢?
2023-02-15 17:01:35
1317
119
原创 Android APK 签名打包原理分析(三)【静默安装的实现方案】
小编目前从事的系统定制类工作,有客户提出了,需要后台“静默安装”他们的app,也就是悄无声息的安装,而且特别强调,不可以跳出任何安装引导页面,他们的app下载完成之后,后台调用公开的android install代码,系统就后台完成安装,安装完成之后,重新打开应用就可以。估计大家即使一直从事的是单纯的app开发,那么也稍微接触过此类需求,比如前两年特别火的,微信抢红包插件。好了,背景先交代到这里,我们由浅入深的,去了解一下静默安装的方案有哪些,都应该如何去实现?
2023-02-14 09:34:50
2710
85
原创 【Android运行时错误】Error inflating class CollapsingToolbarLayout
【Android运行时错误】Error inflating class CollapsingToolbarLayout
2023-02-13 10:41:30
574
130
原创 Android APK 签名打包原理分析(一)【APK结构分析】
本文差不多讲完了,我们整体是对照的这个图,同时配合自己的原始目标(几个问题),来一步一步的探索打包的具体过程的。大家不妨阅读末尾,对照的这个图,脑海中回顾一下,通过本文学到的知识点。binder机制的原理aidl、aapt分别的作用R.java和resource.arsc文件的关系AssetManager与 Resources关系打包的过程。
2023-02-07 09:51:52
5299
140
原创 Retrofit源码分析&实践(六)【Retrofit 多BaseUrl问题解决】
本节到这里就基本结束了,我们回顾一下。解决retrofit 多baseUrl的动态解决方案就是RetrofitManager作为单例类,使用map保存baseurl-retrofit的一一对应保存为了解决需要记忆baseurl-retrofit一一对应关系的问题,我们引入自定义注解BaseUrl,给需要的接口类,直接添加这个注解。
2023-02-01 09:48:06
2477
117
原创 Retrofit源码分析&实践(五)【Retrofit Call等问题解决】
篇幅所限,本文我们先就其中四个问题进行了解决,过程中,也对之前实现的诸多代码进行了优化。Create接口,使用泛型,面向所有请求接口注解的处理封装到ServiceMerthod方法中Call对象的封装和转换返回数据不规范的解决方案。
2023-01-31 11:31:46
506
62
原创 Retrofit源码分析&实践(四)【Retrofit 实现请求和返回】
由上一节,我们基于retrofit使用代码入手,搭建了整体的框架,但是为了简化,一步一步来,我们首先使用自己搭建的retrofit实现基本的请求和返回,那么我们暂时忽略convertfactory和callback的转换,本节我们先直接使用okhttp的call,直接返回okhttp的response,实现基本的retrofit核心功能代码,具体功能点有接口动态代理创建对象注解的处理,拼接url和请求参数基于okhttp实现基本的请求本章,我们一起来基于上节搭建的Retrofit框架,实现核
2023-01-20 09:40:04
508
52
原创 Retrofit源码分析&实践(三)【Retrofit 代码框架搭建】
我们运行一下,不出所料,肯定会崩溃的。因为在上面的代码编写中,我们只是搭建框架,并未填充任何实现,有几件重要的事情,都没有去做retrofit的builder模式创建中,okhttp并未使用convertFactroy接口并未填充实现retrofit.create方法我们只是创建一个空壳,并未去真正实现注解并未处理,因为我们最简单的,要处理注解,从而生成请求的完整url返回的数据封装处理,也就是从okhttp的call,到自己封装的call对象的转换,并未做处理。
2023-01-18 09:45:14
326
8
原创 Retrofit源码分析&实践(二)【Retrofit 免费的api测试工具引入】
工欲善其事必先利其器,我们开始具体的retrofit源码探索与实践之前,需要找一个免费的测试api接口,因为我们知道,不管使用okhttp,还是retrofit,你都需要一个api测试服务器。
2023-01-17 10:18:21
1441
50
EclipseWeb集成开发工具
2022-10-25
SuperRecyclerView-master
2022-10-24
MPAndroidChart android图形绘画工程
2022-10-24
Markdown 的语法word版本
2022-10-24
自定义实现的bindview框架(Butterknife)
2022-05-07
ThreadStateProject
2017-03-16
git reset是干什么的?如何用?
2022-10-31
JAVA UML设计工具
2022-10-31
TA创建的收藏夹 TA关注的收藏夹
TA关注的人