- 博客(14)
- 收藏
- 关注
原创 View绘制流程及原理
前言Q:View在什么时候添加到屏幕上的?A: 经过setContentView流程后,将xml文件添加到DecorViewQ:DecorView 是什么时候添加到 Window 上的?A:在onResume之后handleResumeActivity@ActivityThread.javapublic void handleResumeActivity(IBinder token, boolean finalStateRequest, boolean isForward,String rea
2022-05-25 20:07:58 323 1
原创 Android换肤框架原理解析,实现皮肤随心换
前言首先须知道系统资源如何加载,怎么拦截并替换资源,以下都有讲解xml的View怎么解析的从setContentView进入一路走到下图这里找到createViewFromTag操作几乎都在这里进入tryCreateView()看看那么mFactory2在哪里初始化了?让我们进入oncreate那么如何拦截系统的创建流程?直接使用系统的setFactory2方法public class Factory2Activity extends AppCompatActivi
2022-05-20 08:00:00 1565 3
原创 setContentView流程分析
PhoneWindow的创建通过在ActivityThreed中performLaunchActivity方法拿到activity然后再Activity中attach方法new PhoneWindow然后回到ActivityThreed中performLaunchActivity方法中 mInstrumentation.callActivityOnCreate()执行oncreate继承 Activity 的流程PhoneWindow.setContentView — 主要目的 创建 De
2022-05-16 21:55:27 259 1
原创 OKHttp五大拦截器
RetryAndFollowUpInterceptor重试重定向拦截器重试拦截器在交出(交给下一个拦截器)之前,负责判断用户是否取消了请求;在获得了结果之后 会根据响应码判断是否需要重定向,如果满足条件那么就会重启执行所有拦截器。重试重定向(最大次数为20)响应码说明重定向条件407代理需要授权,如付费代理,需要验证身份通过proxyAuthenticator获 得到了Request。 例: 添加 Proxy-Authorization 请求头401服务器需要授权
2022-05-14 21:59:11 604 1
原创 OKHttp源码分析
OkHttp介绍OkHttp是当下Android使用最频繁的网络请求框架,由Square公司开源。Google在Android4.4以后开始将源码中的HttpURLConnection底层实现替换为OKHttp,同时现在流行的Retrofit框架底层同样是使用OKHttp的优点:支持Spdy、Http1.X、Http2、Quic以及WebSocket连接池复用底层TCP(Socket),减少请求延时无缝的支持GZIP减少数据流量缓存响应数据减少重复的网络请求请求失败自动重试主机的其他ip,自
2022-05-11 22:11:32 2328 1
原创 Android 抓包 Fiddler Https443问题
Android 抓包 Fiddler Https443问题简单的Fiddler配置在这里不说了,可以查到解决Android 手机App抓包出现443问题方法一:把app的targetSdkVersion改为24一下方法二:创建xml文件夹,在文件夹下创建xml文件<?xml version="1.0" encoding="utf-8"?><network-security-config> <base-config > <
2022-05-10 12:06:05 1462
转载 TCP/IP协议
太厉害了,终于有人能把TCP/IP协议讲的明明白白了! 从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TC...
2022-04-21 17:45:44 5325
原创 热修复之二
什么是字节码插桩通过在class文件上面修改 就是字节码插桩使用ASM框架来完成字节码插桩什么是ASM它和class的关系相当于json和gson的关系引入ASM依赖 testImplementation 'org.ow2.asm:asm:7.1'//testImplementation在test中使用 testImplementation 'org.ow2.asm:asm-commons:7.1'准备待插桩的Class像创建一个类public class InjectTe
2022-04-18 21:47:06 157
原创 热修复之一
什么是热修复?定义:在我们应用上线后出现BUG需要及时修复时,不用再发新的安装包,只需要发布补丁包,客户无感知下修复掉BUG。怎么进行热修复?服务端:补丁包管理用户端:执行热修复开发端:生成补丁包热修复解决方案热补丁方案有很多,其中比较出名的有腾讯Tinker、阿里的AndFix、 美团的Robust以及QZone的超级补丁方案AndFix在native动态替换java层的方法,通过native层hook java层的代码。通过注解来定位方法public class Te
2022-04-13 21:15:26 2204
原创 组件化之二
前言有志者,事竟成APT技术APT是什么?APT(Annotation Processing Tool)是一种处理注释的工具,它对源代码文件进行检测找出其中的Annotation,根据注解自动生成代码,如果想要自定义的注解处理器能够正常运行,必须要通过APT工具来进行处理。也可以这样理解,只有通过声明APT工具后,程序在编译期间自定义注解解释器才能执行。通俗理解:根据规则,帮我们生成代码、生成类文件APT中用到的重要元素ackageElement :表示一个包程序元素。提供对有关
2022-04-06 21:19:37 2227
原创 组件化之一
前言盛年不重来,一日难再晨。及时宜自勉,岁月不待人什么是组件化,为什么需要组件化?早期单一分层模式问题一:无论分包怎么做,随着项目增大,项目失去层次感,后面接手的人扑街问题二:包名约束太弱,稍有不注意,就会不同业务包直接互相调用,代码高耦合 问题三:多人开发在版本管理中,容易出现代码覆盖冲突等问题组件化意义不相互依赖,可以相互交互,任意组合,高度解耦,自由拆卸,自由组装,重复利用,分层独立化集成环境/组件环境自动部署配置抽取公共Gradle创建config.gradle编
2022-04-04 21:43:00 1924
原创 Hilt 简单使用篇
引入Hiltdependencies { ... // hilt 依赖导入 implementation "com.google.dagger:hilt-android:2.28-alpha" annotationProcessor "com.google.dagger:hilt-android-compiler:2.28-alpha" ...} buildscript { ... dependencies { ...
2022-03-29 22:18:03 1806
原创 Dagger2简单使用
文章目录前言dagger2的引用简单实用注解实际应用创建物品打包快递员快递接受者单例前言想着把学习的东西记录下来,能更好的巩固;第一次写csdn,相信会越来越好;dagger2的引用(在build.gradle(Moudle)配置)dependencies { implementation 'com.google.dagger:dagger:2.21' implementation 'com.google.dagger:dagger-android:2.35.1' ann
2022-03-26 18:31:03 3165
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人