Android学习计划
文章平均质量分 85
学海无涯,日拱一卒。
惜许
读书养才气,勤奋养运气,宽厚养大气,淡泊养志气。
展开
-
深入源码分析RecyclerView缓存复用原理
是Android日常开发中经常使用的控件,了解其源码,明白其中的缓存复用机制是十分有必要的;ღ( ´・ᴗ・` )原创 2023-06-09 17:44:27 · 1847 阅读 · 0 评论 -
Android Apk加固原理解析
对APP进行加固,可以有效防止移动应用被破解、盗版、二次打包、注入、反编译等,保障程序的安全性、稳定性。常见的加固方案有很多,本文主要介绍如果通过对dex文件进行加密来达到apk加固的目的;ღ( ´・ᴗ・` )原创 2023-04-20 20:03:15 · 2281 阅读 · 1 评论 -
Android EventBus源码深入解析
是一个针对Android进行了优化的发布/订阅事件总线。EventBus大家肯定都已经比较熟悉了,这里重点进行源码分析;看到EventBus的源码,整体代码架构还是比较清晰,阅读起来也比较轻松,其中一些设计思路也比较常见,如设计模式的运用、缓存机制等等,自己也可以跟着源码简单手写一个属于自己的EventBus!ღ( ´・ᴗ・` )原创 2023-01-09 18:36:09 · 500 阅读 · 0 评论 -
Android Kotlin使用AspectJ进行AOP面向切面编程
什么是面向切面编程?针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。由此可知,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。原创 2022-12-14 15:27:20 · 1966 阅读 · 2 评论 -
Android Kotlin使用APT手写ButterKnife
通过使用@BindView注解就可以完成工作,它的实现原理其实也很简单,通过APT(Annotation Processing Too,注解解析器)技术,在编译期为我们生成了一个绑定类,而从完成了View的绑定。// ButterKnife编译时生成的绑定类 package com . crystal . essayjoker . activity;} }那我们是不是可以模仿通过APT去自己实现一套@BindView呢?通过手写,不仅对的原理有了进一步的理解,同时也学习了。原创 2022-12-16 10:38:39 · 600 阅读 · 0 评论 -
Android APT注解处理器中将viewId解析为具体R.id.view名称
我们在上一篇中模仿实现了@BindView注解,最终生成的ViewBinding文件中如下:而生成的文件却是具体的R.id.btn2这里,我们就模仿去处理这个问题。原创 2022-12-18 21:30:53 · 246 阅读 · 0 评论 -
Android插件式换肤以及资源加载流程分析
APP更换皮肤的方式有很多,如系统自带的黑夜模式、插件换肤、通过下发配置文件加载不同主题等等,我们这里就浅谈下插件换肤方式。APP是如何完成资源加载的。通过源码分析,了解了资源加载的基本流程,对插件换肤的实现有了进一步的认知。ღ( ´・ᴗ・` )原创 2022-11-21 12:06:54 · 840 阅读 · 0 评论 -
Android虚拟机与ClassLoader类加载机制
Android应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。Dalvik虚拟机也算是一个Java虚拟机,只不过它执行的不是class文件,而是dex文件。中存在一个Element数组,Element类中存在一个dexFile成员表示dex文件,即:APK中有X个dex,则Element数组中就有X个元素。在 PathClassLoader 中的Element数组为:[patch.dex , classes.dex , classes2.dex]原创 2022-09-16 13:43:33 · 862 阅读 · 0 评论 -
Retrofit原理解析(二)
上一篇我们分析了Retrofit是如何对OkHttp进行封装,而从完成网络请求的Retrofit原理解析(一),这里我们来浅谈一下Retrofit源码中使用的优秀的设计模式。原创 2022-08-30 22:47:14 · 891 阅读 · 0 评论 -
Retrofit原理解析(一)
Retrofit是一个restful的HTTP网络请求框架的封装;那为什么起名叫Retrofit呢?Retrofit翻译为中文,意为改造、翻新之意,Retrofit网络请求的本质是交给内部的OkHttp来完成的,自身只负责网络请求接口的封装,这样一想,名字起的真是十级👍;我们先简单看下RetrofitAPP应用端通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数,如Header、Url等信息,之后交给OkHttp完成后续的请求;当服务端返回请求数据后,OkHttp。......原创 2022-08-30 17:36:59 · 2268 阅读 · 0 评论 -
OkHttp原理解析(二)
上一篇我们学习了OKHttp的请求执行流程,知道了最终请求流程都会交给方法来执行,接下来我们就详细分析执行方法所涉及的设计模式以及各个拦截器的用途!OkHttp原理解析(一)整个OkHttp功能的实现就在这五个默认的拦截器中,所以先理解拦截器模式的工作机制是先决条件。重试重定向拦截器桥接拦截器缓存拦截器连接拦截器请求服务拦截器每一个拦截器负责的工作不一样,就好像工厂流水线,最终经过这五道工序,就完成了最终的产品。原创 2022-08-22 16:31:54 · 1586 阅读 · 0 评论 -
OkHttp原理解析(一)
OKHttp是当前Android使用最广泛的网络请求框架,由Square公司开源。Google在Android4.4以后开始将源码中的HttpURLConnection底层实现替换为OKHttp,同时现在流行的Retrofit框架底层同样是使用OKHttp的。github链接本文以最新版本4.10.0为例进行代码分析;支持Http1、Http2、Quic以及WebSocket;连接池复用底层TCP(Socket),减少请求延时无缝的支持GZIP减少数据流量缓存响应数据减少重复的网络请求。...原创 2022-08-15 10:27:52 · 689 阅读 · 0 评论 -
Android热修复学习(一)
当我们应用上线后出现bug需要及时修复时,不用通过新发安装包,而是通过发布补丁包,在客户无感知的情况下修复bug;热修复实现原理归根还是类加载机制,与插件化方案的不同之处在于修复dex需要放在合并后的dex数组前面,才能执行修复后的代码;本质上都是对于类加载机制的运用;...............原创 2022-08-03 09:46:21 · 794 阅读 · 0 评论 -
Android插件化学习之加载插件资源
在前面两篇我们学习了如何类加载机制的原理以及如何启动插件activity;Android插件化学习之初识类加载机制Android插件化学习之启动插件Activity我们前面也提到过启动插件activity时如果直接加载layout资源会出错,那是因为什么原因呢?想要了解这个问题的原因,就需要对资源加载流程有一定的认知,接下来我们就来一起看下系统是如何加载resource资源的;通过上面的学习发现,归根到底还是对源码的阅读以及反射的运用,这里感叹一下,反射真是太强大了,许多黑科技都是通过反射实现的,当然。..原创 2022-08-01 16:52:11 · 913 阅读 · 0 评论 -
Android插件化学习之启动插件Activity
上一篇我们学习了类加载机制原理以及如何调用插件apk的dex方法Android插件化学习之初识类加载机制,这一篇我们紧接着上一篇的内容,尝试去启动插件apk中未注册的activity。其实我们发现最大的难点是做各个版本适配,因为Android启动流程每个版本的更新,那就需要我们每更新一个版本就需要去阅读源码进行相关适配,这是一个让人比较头疼的问题,因此插件化方案也在慢慢被抛弃,但我们通过学习阅读源码,去尝试实现各种黑科技,理解插件化方案实现的思想,这又何尝不是一种进步呢;ღ(´・ᴗ・`)https。....原创 2022-08-01 11:08:34 · 2024 阅读 · 0 评论 -
Android插件化学习之初识类加载机制
插件化技术最初源于免安装运行apk的想法,对于免安装的apk可以理解为插件,而支持插件的app称为宿主app,宿主app在运行是加载运行插件apk,这个过程称之为插件化;原创 2022-07-28 14:45:14 · 691 阅读 · 0 评论 -
ARouter原理解析之自定义路由框架DXRouter
我们在前面两篇博客学习了ARouter的实现原理,那我们能否参考ARouter的实现,自己动手实现一套简单的路由框架呢?这一篇我们就尝试仿照ARouter,自定义一个属于我们自己的路由框架~~DXRouter;ARouter原理解析之注解处理器ARouter原理解析之路由跳转首先,我们依照ARouter一样,编写我们自己的DXRouter注解,比较简单;};}接着,我们来实现注解解析器,我们目标是在各个模块下生成文件,这里文件路径我们统一固定为,文件名固定为,通过模块进行组划分以及分模块进行缓存查找;...原创 2022-07-27 11:09:39 · 289 阅读 · 0 评论 -
ARouter原理解析之路由跳转
我们在上一篇分析了ARouter注解解析器相关源码;ARouter原理解析之注解处理器,了解了ARouter通过APT技术在编译期动态生成代码以及其用途,这一篇我们着重分析下ARouter是如何实现activity之间路由跳转;ARouter初始化的时候会把注入的信息进行缓存到Warehouse中,在进行navigation的时候,根据缓存进行懒加载,然后获取实际对象或者跳转activity;ღ(´・ᴗ・`)...原创 2022-07-26 10:20:24 · 527 阅读 · 0 评论 -
ARouter原理解析之注解处理器
路由作为项目组件化的基础,其重要程度不言而喻,这里我们就来一起学习阿里开源的路由框架ARouter(一个用于帮助AndroidApp进行组件化改造的框架——支持模块间的路由、通信、解耦),对应github地址https编译期arouter-compiler负责生成了注入的的一些代码;ARouter$$Group$$group-name以group-name为文件名注入该group下声明了@Route的信息下一节我们接着学习ARouter源码,分析如何实现activity。..................原创 2022-07-25 17:26:28 · 527 阅读 · 0 评论 -
PKMS源码解析
PKMS指PackageManagerService服务本身以及PackageManagerService服务运作时使用到的各种其他系统服务;是Android系统中的核心服务之一,负责应用程序的安装、卸载以及信息查询等工作;1.解析AndroidManifest.xml文件,解析清单文件中的所有节点信息;2.扫描.apk文件,安装系统应用、本地应用等;3.管理本地应用,主要有安装、卸载、应用信息查询等;客户端通过拿到ApplicationPackageManager对象,通过binder进行跨进程通信原创 2022-07-06 13:17:47 · 1240 阅读 · 0 评论 -
Android WMS工作原理浅析(二)
从WMS类中包含的属性也可以看出WMS的主要职责,窗口管理、窗口动画以及监听输入进行事件派发。在分析addWindow之前,先了解几个类;** WindowToken**:WindowToken具有令牌的作用,是对应用组件的行为进行规范管理的一个手段。WindowToken由应用组件或其管理者负责向WMS声明并持有。应用组件在需要新的窗口时,必须提供WindowToken以表明自己的身份,并且窗口的类型必须与所持有的WindowToken的类型一致,同时它将属于同一个应用组件的窗口组织在了一起;Displ原创 2022-07-05 14:00:37 · 2763 阅读 · 1 评论 -
Android WMS工作原理浅析(一)
window:它是一个抽象类,具体实现类为 PhoneWindow ,它对 View 进行管理。Window是View的容器,View是Window的具体表现内容;windowManager:是一个接口类,继承自接口 ,从它的名称就知道它是用来管理 Window 的,它的实现类为 WindowManagerImpl;**WMS:**是窗口的管理者,它负责窗口的启动、添加和删除。另外窗口的大小和层级也是由它进行管理的;三者之间的关系:1.Application Window(应用窗口):例如Acti原创 2022-07-04 18:35:40 · 4573 阅读 · 0 评论 -
Handler的工作原理
Handler对于大家再也熟悉不过了,在开发中可以说是无处不在,可见其重要性,因此在掌握Handler的使用的情况下,理解其工作原理也是十分有必要的。构造方法是一个类的入口,首先让我们来看看Handler都有哪些构造方法吧!其中参数CallBack为用于处理消息的回调接口,可以为null,参数async注释中描述为如果为true,则handler发送给它的每个相关的Message或发布给相关的Runnable,不太理解,调用的构造方法均传的位false。FIND_POTENTIAL_LEAKS为标志是否存原创 2022-07-01 16:23:56 · 299 阅读 · 0 评论 -
Android启动流程
/system/core/init/Android.bp 脚本文件–> init的入口函数main.cpp的main方法FirstStageMain主要工作:1.挂载、创建文件;2.重定向输入输出;3.初始化内核日志打印;4.启动selinux_setupSetupSelinux主要工作:1.linux安全策略,对应android权限管理;【最小权限原则】2.启动second_stagSecondStagMain主要工作:1.PropertyInit(); – 初始化属性域2.处理子进原创 2022-06-30 15:02:01 · 323 阅读 · 0 评论 -
Handler原理深度解析
###整体架构这是典型的生产者-消费者设计模式,这样设计的好处:1.保证数据生产消费的顺序,通过MessageQueue实现,先进先出;2.生产者与消费者只依赖Handler,不会直接相互持有,之前没有耦合;Handler:用于发送和接收消息Looper:用于轮询消息队列,一个线程只能有一个Looper;(通过ThreadLocal实现)Message:具体消息的实体;MessageQueue:消息队列,用于存储和管理消息;###重点方法源码解析####Messag.obtain()复用缓冲池原创 2022-06-30 11:06:25 · 1126 阅读 · 0 评论 -
深入理解Binder机制
1.Binder是一种进程间通信机制;2.Binder是一个虚拟物理设备驱动;3.Binder是一个能发起通信的Java类;在了解传输流程之前,先简单了解下Android中的内存划分以及内存映射【mmap】概念;####内存划分内存被操作系统划分成两块:用户空间和内核空间,用户空间是用户程序代码运行的地方,内核空间是内核代码运行的地方。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。Linux通过将一个虚拟内存区域与一个磁盘上的对象关联起来,以初始化这个虚拟内存区域的内容,这个过程称原创 2022-06-30 11:04:12 · 788 阅读 · 0 评论