android架构基石
文章平均质量分 84
人人都有一个架构之梦,而要想成就梦想,没有扎实的基石是不可能达成的,所以这里记录架构成长之路的点点滴滴~~
webor2006
码农一个,记录个人成长的点滴~~
展开
-
Android9.0动态运行时权限源码分析及封装改造<四>-----打造自己的权限申请框架下
跟离上一次Android9.0动态运行时权限源码分析及封装改造<三>-----打造自己的权限申请框架上的权限申请框架学习又过去一年多了,还差这篇的收尾,这次把它给完结了,不能半途而废。编译时自动生成文件:生成代码编写:我们已经把所有标有注解的方法都收集起来了,接下来则可以根据咱们收集的这些信息来编写代码生成的逻辑,回到这块:要想生成代码,需要使用到这个对象:然后接下来则遍历咱们收集的方法集合来进行类的生成,如下:其中MethodInfo中有几个私有方法需要将其原创 2021-09-01 09:46:00 · 376 阅读 · 0 评论 -
Android9.0动态运行时权限源码分析及封装改造<三>-----打造自己的权限申请框架上...
流程回顾:在上一次https://www.cnblogs.com/webor2006/p/13269742.html对于动态权限的整个执行流程进行了一个分析,接下来则开始撸码从0开始打造属于自己的权限申请框架,在正式撸码之前先来简单回顾一下整体权限申请的一个流程:权限检测流程:显示申请权限的流程:权限申请流程:编译时注解处理器:用通常的方式来申请权限:这里咱们先不用高大上的...原创 2020-07-20 14:31:00 · 196 阅读 · 0 评论 -
Android9.0动态运行时权限源码分析及封装改造<二>-----权限检测requestPermissions源码分析...
校验requestcode是否合法:继续接着上一次https://www.cnblogs.com/webor2006/p/12757460.html的权限申请框架源码进行分析,这一次则需要分析最最核心的API了:这块稍复杂一些,慢慢来,不着急:所以此条件是满足的,看一下它里面做了啥?Activity.requestPermissions():继续往下:这个目前咱...原创 2020-07-08 22:44:00 · 309 阅读 · 0 评论 -
Android9.0动态运行时权限源码分析及封装改造<一>-----运行时权限名词解释、权限检测源码分析...
概述:我们都知道Google在Android6.0时引入了权限申请机制,也是变革非常大的一块,而如今商用项目中基本上都会涉及到这块,基本上都是使用三方成熟的框架来处理权限的问题,最常用的框为https://github.com/googlesamples/easypermissions,但是!!对于权限这块的知识有没有认真的去研究过呢?反正目前每次想到权限这块我的头还是有点大的,这也就是没有掌...原创 2020-07-05 15:50:00 · 273 阅读 · 0 评论 -
探究Google力推的JetPack库<五>---------WorkManager
作用:对于Jetpack架构库只剩下最后一个木有学啦:这次来搞定它,先上官网了解一下它:那啥场景会有这种任务需求呢?官网也举例说明了:而它不适合使用的场景官网也给出了提示:它还有一个特点就是:自动选择合适的方式执行任务,以减少电量消耗。另外它向前兼容的Android版本为:基本使用:创建一个任务:先添加依赖:接下来则定义一个任务:package com.and...原创 2020-03-18 09:30:00 · 167 阅读 · 0 评论 -
探究Google力推的JetPack库<四>---------Navigation、Paging
经过之前的Jetpack学习,目前对于架构这块的组件只剩下最后三个木有学习了,如下:所以接下来继续对剩下的库进行学习。Navigation:了解:基本使用:这里主要是Fragment之间的来回导航,先来看一下最终的效果:也就是有三个Fragment,第一个跳到第二个;然后第二个既可以跳回第一个,又能跳到第三个;而第三个则又可以跳回到第二个,如果像这种跳转平常实现的话会比较麻烦,...原创 2020-03-17 09:29:00 · 156 阅读 · 0 评论 -
探究Google力推的JetPack库<三>---------LiveData&ViewModel再次探究、Room
LiveData&ViewModel再次探究:DEMO编写:关于LiveData和ViewModel的使用在之前https://www.cnblogs.com/webor2006/p/12483158.html已经学习过了,但是木有剖析它的实现原理,所以这里再次对它进行深入了解一下,先来编写两个DEMO:具体效果如下:①、利用ViewModel延迟5秒之后来更新UI:②、利用...原创 2020-03-15 16:48:00 · 126 阅读 · 0 评论 -
探究Google力推的JetPack库<二>---------用官方Data Binding来构建MVVM架构、集成Lifecycles完善MVP框架...
在之前https://www.cnblogs.com/webor2006/p/12463543.html咱们对于MVVM架构进行了学习,其中提到对于MVVM其实Google已经有现成的框架可以用了---databinding(https://github.com/android/databinding-samples),所以接下来则来看一下它是如何来搭建MVVM框架的。基础使用:初步绑定:...原创 2020-03-14 22:01:00 · 126 阅读 · 0 评论 -
探究Google力推的JetPack库<一>---------Lifecycles、LiveData、ViewModel、手写LiveDataBus
上一次https://www.cnblogs.com/webor2006/p/12463543.html对于MVVM架构的进行了一个学习,其中提到了Google官方其实推出了一个MVVM的工具框架:Data Binding,本来计划着这次是来研究一下利用官方的MVVM的这个框架的,但其实它是属于JetPack库中的一员,所以这里有必要先对JetPack进行一个了解。什么是JetPack库?上...原创 2020-03-13 09:32:00 · 164 阅读 · 0 评论 -
MVC->MVP->MVVM架构完整演变过程剖析
在之前对于MVP这种架构风格已经进行了深入的学习了,接下来则打算学习一下MVVM这种架构,MVC、MVP、MVVM这三者基本上会被人一起问到的,而对于MVVM,google官方推出了一个dataBinding的MVVM的框架,而从学习的角度直接上框架并非是一个非常好的学习方式,所以这次就手把手的一步步通过一个小案例来实现MVVM框架,对其原理有一个本质的了解,这样在下一次学习dataBindin...原创 2020-03-11 21:13:00 · 187 阅读 · 0 评论 -
从0来搭建超灵活的MVP商用框架<三>-------网络层加入RxJava、事件总线封装、Dagger2集成...
继续接着上一次https://www.cnblogs.com/webor2006/p/12455238.html的框架进行进一步的完善。网络层加入RxJava:商用项目中对于网络层精典的搭配当属于“OkHttp+Retrofit+RxJava”了,所以这里也不例外,准备加入RxJava,先添加依赖:然后再建一个新的包,用来存放RxJava相关的包:然后这里基于Retrofit的框架进...原创 2020-03-11 14:08:00 · 114 阅读 · 0 评论 -
从0来搭建超灵活的MVP商用框架<二>-------APP基础配置、Okhttp+Retrofit封装
在上一次https://www.cnblogs.com/webor2006/p/12445157.html中已经对于MVP的基础框架进行了搭建,但是呢该框架还少了很多东东,所以这次打算进一步完善一下,封装一个核心Module。App基础配置封装:框架搭建:新建一个核心Module,所以基础配置都放到这个下面:此时添加依赖关系:而由于app又依赖于isolation_process...原创 2020-03-10 20:40:00 · 137 阅读 · 0 评论 -
从0来搭建超灵活的MVP商用框架<一>-------从MVC至MVP的转变、通用网络切换框架
其实早就想记录关于MVC、MVP、MVVM架构的演变细节了,所以接下来借此机会准备对于这块的东东详细进行一个梳理,就自己实际工作而言还是习惯用MVC传统的代码习惯,毕境习惯了它N多年了有点改不过来,而对于MVP的代码风格在目前的项目上基本上已经越来越普及了,而往往项目中MVC和MVP风格都并存在的,所以习惯MVP风格的代码风格也是当务之急的,最终会打造目前公司所用的MVP的非常精简的企业级实现框...原创 2020-03-09 10:57:00 · 141 阅读 · 0 评论 -
IOC注入框架设计<四>-------中大型项目注入神器dagger2框架详解
Dagger2是啥?继续来学习IOC思想的一个新框架---Dagger,说实话这个框架还木有在工作项目中用到过,但是它在大型项目中用它的还是很常见的,项目越大越能体现它的好处,核心好处就是能够解耦,所以接下来好好把这个框架的使用给了解了,待未来在项目中看到它的用法也能很读懂,先来上官网了解一下它:https://github.com/google/dagger貌似跟ButterKnife...原创 2020-03-03 20:54:00 · 150 阅读 · 0 评论 -
IOC注入框架设计<三>-------Android Studio插件开发来自动生成ButterKnife相关代码
在上一次https://www.cnblogs.com/webor2006/p/12392259.html中对于Android Studio的插件实现入了一下门,这次则通过一个案例对于编写Android Studio的插件进行全面的学习,可能在实际工作中自己来编写插件的机会不多,但是你如果懂得写插件的思路可能在实际某个场景上是能帮上忙的。插件效果演示:那这次要实现的插件效果长啥样呢?其实就是...原创 2020-03-04 22:26:00 · 168 阅读 · 0 评论 -
IOC注入框架设计<二>-------ButterKnife框架再来审视和Android Studio插件技术入门
在上一次https://www.cnblogs.com/webor2006/p/12374975.html中对于通过实践的方式来对于IOC的思想有了一定的了解,接下来继续围绕IOC进行进一步的学习。重撸ButterKnife框架:关于ButterKnife的手写其实在之前https://www.cnblogs.com/webor2006/p/10582178.html已经详细剖析过了,由于它...原创 2020-03-03 20:53:00 · 135 阅读 · 0 评论 -
IOC注入框架设计<一>-------IOC思想实例剖析
关于IOC这个概念在当年学习J2EE时早就听说过了,经典的框架当属于Spring,而在Android当中的一些现代的框架中这种思想也大量被使用着,所以接下来会对IOC的整体思想做一下认识。核心思想:概念:IOC是原来由程序代码中主动获取的资源,转变由第三方获取并使原来的代码被动接收的方式,以达到解耦的效果,称为控制反转。图解:对于上面的文字概念说明用一个形象的图再来阐述一下:这里举一个...原创 2020-02-27 22:32:00 · 117 阅读 · 0 评论 -
OkHttp框架设计<一>---http家族史、OkHttp源码分析、拦截器原理
关于Okhttp在之前有过一篇https://www.cnblogs.com/webor2006/p/10513950.html源码的解读,这里准备再对它进行温故知新,并最终手写整个OkHttp拦截链这块的逻辑,巩固再巩固。http家族史【了解】:先来巩固下基础,毕境OkHttp是一个网络框架。网络分成模型:上面了解既可,关于网络分成的一个原因之前在这篇有写过:https://www....原创 2020-02-25 17:24:00 · 196 阅读 · 0 评论 -
OkHttp框架设计<二>---连接拦截器原理剖析、开启手写OkHttp核心框架
连接拦截器原理剖析:在上一次https://www.cnblogs.com/webor2006/p/12362710.html文末提到了ConnectInterceptor这个拦截器,因为它比较重要,所以接下来分析一下它的整个流程。做个小实验:这里做一个socket的小实验,来获取一个网页的返回内容,很简单,就是通过Socket来连接到http://www.weather.com.cn/w...原创 2020-02-25 17:26:00 · 147 阅读 · 0 评论 -
OkHttp框架设计<三>---手写OkHttp拦截器链
继续上一次https://www.cnblogs.com/webor2006/p/12362753.html的OkHttp框架手写,上次已经将整个OkHttp的请求框架搭建好了,接下来就剩拦截器链这块的逻辑了,这块也是被人问得最多的,所以接下来自己手动实现整个机制透彻的攻克它。拦截器链:先来回呃一下我们要开始编写的入口代码:我们知道实现链式请求的核心就是有一个拦截器链的类,如源码所示:...原创 2020-02-26 23:39:00 · 224 阅读 · 0 评论 -
RXJava2响应式编程框架设计<四>---高阶泛型、手写RxJava2核心实现
在之前三篇中已经对于RxJava2的各种使用及原理有了一定的了解了,接下来则通过手写实现的方式加强对于它的原理的掌握。<? extend T>和<? super T>阐述:从是否可读可写角度说明:在正式手写RxJava代码之前,需要先对其泛型知识做一个巩固,因为RxJava的源码中充斥着大量的泛型,先来贴一个源码中的一处代码:其实核心就是要了解<? ext...原创 2020-02-24 14:52:00 · 133 阅读 · 0 评论 -
RXJava2响应式编程框架设计<一>---Rxjava2入门
关于Rxjava在之前https://www.cnblogs.com/webor2006/p/10545699.html已经对它的原理啥的有了一定的研究了,这次准备再对它进行进一步深入的研究,这里会从一个基础到原理的完整流程中重新审视它,并且最终来手写一下整个Rxjava框架的核心框架,进一步加深对该框架的理解。前言:什么是RxJava?这其实是费话,基本上只要从事Android开发的人基...原创 2020-02-22 16:41:00 · 96 阅读 · 0 评论 -
RXJava2响应式编程框架设计<三>---Rxjava2背压、生命周期
在上一次https://www.cnblogs.com/webor2006/p/12348890.html中已经完成了对RxJava2的整个线程切换原理的详细剖析了,这次继续来学习它其它比较重要的知识点,手写RxJava2核心原理放到下一次。RxJava2背压【Backpressure】:背压这个概念在RxJava1.x中是木有的,它是在RxJava2.x才提出来的,而这个概念又是很重要的,...原创 2020-02-24 07:37:00 · 455 阅读 · 0 评论 -
RXJava2响应式编程框架设计<二>---Rxjava2线程切换原理再梳理
在上一次https://www.cnblogs.com/webor2006/p/12329139.html中对于RxJava2进行了一些简单入门,这次则从源码的角度对它的原理进行一个分析,其中重点是分析线程切换的原因,这个在之前的https://www.cnblogs.com/webor2006/p/10545699.html已经也分析得比较透彻了,这里相当于再查漏补缺吧。咱们以这个样式的代码...原创 2020-02-23 13:27:00 · 127 阅读 · 0 评论 -
Glide框架设计<二>-------Glide复用池、磁盘缓存、图片资源加载手写实现
继续接着上一次https://www.cnblogs.com/webor2006/p/12313876.html的缓存进行编写。Bitmap复用池:概念:关于啥是Bitmap复用,这里还是借用博主的这篇文章https://www.jianshu.com/p/97fd67720b34的说明过一下,先来看两张对比图:复用前:可以看到每一张Bitmp在显示时都申请了一块内存,而如果采用复...原创 2020-02-17 17:04:00 · 150 阅读 · 0 评论 -
Glide框架设计<一>-------Glide基本使用、缓存原理、内存缓存和活动资源手写实现...
对于Android的图片加载框架,早些前用得最普遍的则是Android-Universal-Image-Loader,github地址:https://github.com/nostra13/Android-Universal-Image-Loader,不过它现在也依然被广泛应用着,但是如今的项目如果要选取一款图片加载框架用到工程中,glide算是一个首选了,为啥呢?肯定是好用嘛,而对于一个程序...原创 2020-02-15 21:42:00 · 361 阅读 · 0 评论 -
Glide框架设计<四>-------生命周期管理、Glide框架整合源码分析
接着上一次https://www.cnblogs.com/webor2006/p/12324332.html的源码继续分析。Glide框架源码分析:Request.begin():在上一次中已经分析到了这:也就是准备要开始发起请求了:那这个engine是在哪创建的呢?而这个GlideContext是在构建的:Engine.load():好继续回到主流程:...原创 2020-02-18 08:17:00 · 123 阅读 · 0 评论 -
Glide框架设计<三>-------图片资源加载继续手写实现、Glide框架架构源码分析
图片资源加载手写:FileUriLoader:跟着上一次https://www.cnblogs.com/webor2006/p/12322227.html的代码继续编写,回忆一下:已经实现了对于网络图片的加载,好,接下来咱们再来拓展一下,从文件中来加载图片,像这样:有了标准行为,来实现一下ModelLoader既可:package com.android.glidearcstu...原创 2020-02-17 23:29:00 · 150 阅读 · 0 评论 -
组件化架构深入剖析<一>-----组件化基础框架搭建
组件化这种概念也提出来好久了,如今的商用项目基本都是基于组件化来进行开发了,面试时问到它的机率也比较大,这么经典的东东可惜我还木有将其记录下一来,所以接下来会花些时间来对组件化的各个细节进行整理。模块化、组件化、插件化概念了解:对于这三者的概念其实已经烂大街了,不过还是先用文字对它们进行一个总结。模块化:根据不同的关注点,将一个项目的可以共享的部分抽取出来,形成独立的Module,这就是模...原创 2020-02-08 10:40:00 · 253 阅读 · 0 评论 -
组件化架构深入剖析<三>-----Arouter核心功能手写实现、Arouter官方核心源码分析...
注册处理器生成组映射:继续跟着上一次https://www.cnblogs.com/webor2006/p/12275672.html的代码进行接下来的实现,上一次已经将路由表的映射的工具类的生成代码编写完了,接下来则需要编写它:对应咱们的代码也就是它:其写法跟那个生成映射表类差不多,这里就直接贴出来既可:此时需要在我们每个模块下的gradle中增加一个配置,这样我们在注解处理器...原创 2020-02-11 08:37:00 · 395 阅读 · 0 评论 -
组件化架构深入剖析<二>-----组件通信原理剖析及实现注解处理器生成路由工具类...
继续接着上一次https://www.cnblogs.com/webor2006/p/12275665.html的代码开撸, 不过在继续开撸之前,咱们先用图的方式对其实现组件之间通讯的原理进行一下整体的了解,这样有助于我们能清楚的知道接下来手写路由更加的明确。组件路由通信原理剖析:一说到组件化则就会说到路由,那为啥要有路由的存在呢?所以有必要将整个我们接下来要实现的一个路由的原理给梳理一下,...原创 2020-02-08 10:46:00 · 137 阅读 · 0 评论 -
插件化架构深入剖析<二>-----插庄式实现Service&动态广播启动机制剖析
基础巩固---DexClassLoader是如何加载插件中的类?在上次https://www.cnblogs.com/webor2006/p/12267707.html插件化的学习中已经实现了Activity的跳转了,在继续开启新的学习之前,先来对这块代码的原理进行一下剖析:其实关于Android中是如何加载类的在当时https://www.cnblogs.com/webor2006/p/...原创 2020-02-06 15:00:00 · 141 阅读 · 0 评论 -
插件化架构深入剖析<一>-----插庄式实现Activity跳转机制剖析
关于插件化这个技术如今也已经烂大街了,不过遗憾的是在自己的职业生涯中还木有真正遇到过插件化的公司项目,本来有一家公司正准备有机会跟着一位大神参与插件化的从0重构,但是好景不长最终夭折了~~于是私底下对于插件化技术的研究从未停止过,但是从未对它进行过笔录,对于这个话题其实去面试时也会被经常问到,毕境里面涵盖的技术含量还是有的,所以接下来准备花些篇幅系统全面的对这项技术进行一个全面的梳理。插件化概...原创 2020-02-06 10:02:00 · 185 阅读 · 0 评论 -
插件化架构深入剖析<三>-----插庄式静态广播启动及Hook方式初识
静态广播的调用:定义静态广播:对于插件中动态广播的调用在上一次https://www.cnblogs.com/webor2006/p/12268754.html中已经实现完了,接下来则来实现静态广播的调用,先来在插件中定义一个静态广播:此时就需要在清单文件中进行注册了:然后当收到广播消息之后,再往宿主也发送一个广播,这样就从宿主到插件,插件到宿主之间消息串通了,如下:接下来就是怎...原创 2020-02-06 15:14:00 · 198 阅读 · 0 评论 -
网易云音乐动态式换肤框架分析与手写实现<三>
在上一次https://www.cnblogs.com/webor2006/p/12218582.html已经完成了动态换肤的效果了,但是其实还有一些细节待完善,所以这次一一来把它们都解决掉。换肤细节完善:先来涨个姿势:再往下进行完善之前,先来搞明白个东东,就是关于Activity的换肤其实很好理解,因为咱们在Activity创建时设置了咱们自己的工厂了,如下:但是!!!对于MainA...原创 2020-02-04 16:34:00 · 299 阅读 · 0 评论 -
网易云音乐动态式换肤框架分析与手写实现<一>
对于APP的换肤,曾经有一个公司的APP对于“某个”界面有换肤的需求,当时的做法是将换肤的规则定义成配置文件由服务器动态下发,然后根据配置文件的解析再来对界面中的元素进行换肤【如背景、字体颜色、大小之类的】,但是这种方式其实是很麻烦的,当时只是针对一个界面有这个换肤的需求,那如果是整个APP中的不同界面都要进行换肤呢?可想这种方式要实现起来就不知道有多复杂,XML解析也是挺浪费性能的;另外还有一...原创 2020-01-16 15:37:00 · 315 阅读 · 0 评论 -
网易云音乐动态式换肤框架分析与手写实现<二>
换肤处理:采集控件:继续接着上一次https://www.cnblogs.com/webor2006/p/12201532.html的代码进行编写,上次已经在View工厂那块对View的创建进行处理了,接下来则需要处理View对应的具体属性,这也需要涉及到一个属性的过滤,这里新建一个类专门用来处理View的属性:那哪些属性是需要进行换肤的呢?下面直接贴出来,如果实际项目中还有其它的可以...原创 2020-01-20 16:50:00 · 155 阅读 · 0 评论 -
跨进程架构HermesEventBus原理分析到手写实现<一>
在上一次https://www.cnblogs.com/webor2006/p/12179301.html咱们对于EventBus进行了原理性剖析,但是!!!它的使用只限于同一个进程中,如果想要在多个进程之间也能像EventBus一样这样使用,此时可以借用饿了么开源的HermesEventBus这个框架,但是实际商用我还木有用过它,但是从学习的角度对于探究它的底层原理对于自已的技能提升还是很有必...原创 2020-01-13 13:49:00 · 302 阅读 · 0 评论 -
跨进程架构HermesEventBus原理分析到手写实现<二>
在上次https://www.cnblogs.com/webor2006/p/12186914.html对于HermesEventBus的核心原理了解了之后,接下来则准备从0开始手动来实现这样一个跨进程通信的功能,当然实现的代码不可能跟官方的一模一样,简化了很多,重点是效果是一样的,通过这样的手动的实现可以进一步加深对于这个框架的理解。定义AIDL文件:这里还是在之前那个工程上进行代码的编写...原创 2020-01-15 13:25:00 · 165 阅读 · 0 评论 -
跨进程架构HermesEventBus原理分析到手写实现<三>
发送请求到服务端:继续接着上一次https://www.cnblogs.com/webor2006/p/12196171.html的代码继续来编写,上一次在SecondAcitity中完成了远程服务的连接了:接下来则应该是发送消息给主进程,然后在MainActivity中进行消息的接收处理了,我们知道在主进程中我们注册了一个UserManager单例对象:那如果我们在SecondAct...原创 2020-01-15 22:37:00 · 274 阅读 · 0 评论