自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 资源 (10)
  • 收藏
  • 关注

原创 字节码插桩技术---Transform配合ASM进行插桩(三)

上篇文章介绍了在build.gradle中如何使用ASM进行字节码处理。在build.gradle中进行插桩的话,会存在几个问题(1)对groovy语法要有一些了解(2)不同的gradle版本,所做的处理会有不同,比如打包dex的指令,对class文件的处理方式上等。这些问题上篇文章都有说过。今天将介绍一种新的方式使用Transform的相关API配合ASM进行插桩。.........

2022-07-18 17:39:24 1148 1

原创 字节码插桩技术---Android项目实操(二)

上篇博客简单介绍了使用ASM进行字节码插桩的过程,但是仅仅依靠上篇博客的技术点,是无法在Android项目中使用的,有一个阻碍点就是由于class文件最后被打包到了dex文件中,无法像上篇文章那样,拿到准确的class文件路径。这篇文章,我会详细介绍如何在Android项目中进行字节码插桩............

2022-07-16 23:05:56 1112

原创 字节码插桩技术---ASM的使用(一)

字节码插桩技术简单来讲就是通过操作class文件的字节码,对class文件进行改造。在很多三方框架都有应用,比如路由框架ARouter,热修复框架Robust等。而字节码插桩一般都会使用ASM工具进行操作,这篇文章会简单介绍下篇博客会详细介绍,Android项目中如何进行字节码插桩。...............

2022-07-14 23:13:26 1636 1

原创 Android---Native层崩溃的监听工具BreakPad

做Android开发的同学,基本上都遇到过程序崩溃,大部分的崩溃问题都存在于Java层。在开发过程中,如果遇到崩溃,我们可以在logcat中找到相关的信息进行修改;如果是线上出现的问题,我们可以使用Bugly,友盟等三方工具进行错误上报,或者自己做监控,生成错误文件进行上报分析,这时候需要用到UncaughtExceptionHandler接口如果是Native层发生的崩溃怎么办?基本这个问题我们都会略过,第一:看不懂,第二:三方的so库发生了问题我们也解决不了。所以Native层的崩溃监听与解析,主要针对

2022-06-08 19:24:49 2284 6

原创 Android---LeakCanary源码分析

LeakCanary不用多说,学过Android的同学都知道它。LeakCanary2.x相对于LeakCanary1.x有两个比较明显的改变:(1)源码全部使用了Kotlin进行编写(2)不需要再Application中进行install操作。今天我就从LeakCanary的启动以及各个对象的回收监听两个方面来解析这个框架上面我们说了,2.x的版本,我们不用在Application中调用install方法了,那LeakCanary是如何启动的呢?首先,我们先找到AppWatcherInstaller.kt

2022-06-07 14:55:43 839

原创 Android---RecyclerView的四级缓存

之前写过一片关于RecyclerView的博客,主要是从源码的角度捋了一遍。最近看了看,觉得写的比较粗糙,比较重点的四级缓存没有说的很清楚,所以再写一篇博客来专门说一下RecyclerView的四级缓存1.ScrapScrap是RecyclerView的第一级缓存,包括mAttachedScrap和mChangedScrap。之前对这两个缓存很不理解,打点调试的时候,发现无论怎么滚动RecyclerView,都没有走到这两个缓存的地方。这是因为这两个缓存和滚动没有关系,只有当界面重新绘制的时候,这两

2022-05-31 22:50:06 1615

原创 Android--点击事件的分发(1)

在事件分发和处理的过程中,我们比较熟悉方法有:比如dispatchTouchEvent,做事件分发;onTouchEvent,onTouchListener用来处理各类型的事件等,但是事件到底是从哪里开始的呢?又是怎么传递到dispatchTouchEvent方法,这些我们都没有关心过,今天就带着大家简单过一下源码相信大家应该还没忘记ViewRootImpl这个类,在上篇博客Android-UI的渲染过程中提到过它的setView方法,主要解释了里面requestLayout方法,今天我们看一下其他

2022-05-22 22:59:22 791

原创 Android-UI的渲染过程

UI的渲染过程

2022-05-15 23:44:15 840

原创 Android--LayoutInflater的渲染过程

LayoutInflater我们应该都很熟悉了,我们在它的inflate中传入对应的布局id,就可以得到一个View,LayoutInflater是如何做到的呢?我们今天来探索看看。目录一、LayoutInflater的inflate方法二、inflate方法中各个参数的含义一、LayoutInflater的inflate方法我们先贴出来一个布局文件以及LayoutInflater的调用过程布局文件R.layout.test_layout<?xml version="

2022-05-12 20:56:01 469

原创 Android--setContentView的绘制流程

setContentView大家应该比较熟悉,而不同的Activity,setContentView的绘制流程也不一样,这里所说的不同的Activity分别是:Activity和AppCompatActivity。我们一一来介绍它们的setContentView。一、Activity的setContentView我们先查看Activity的setContentView public void setContentView(@LayoutRes int layoutResID) {

2022-05-12 00:53:22 831

原创 从源码分析Glide

Glide中有很多方面都是我们需要关注,比如生命周期的管理,缓存机制,设计模式等。其中生命周期的管理应该是最简单的,我今天就不进行介绍了,今天主要从数据加载流程中分析缓存机制和相关的设计模式Glide可以加载的数据源非常多,比如File,网络,Drawable等,今天主要以网络图片为例进行介绍,其他的类型加载流程是一样的,如下:Glide.with(this) .load("https://img2.baidu.com/it/u=894463840,2154289921&fm=25

2022-04-22 11:12:56 1760

原创 Android Binder跨进程源码解析

之前讲过Android Parcel数据传输源码解析,也讲过Android的bindService,但是Binder才是跨进程的核心内容,今天我就详细的说一下Binder到底是如何跨进程的。如果对bindService不是很了解的同学,建议先看下上面的文章进行了解。............

2022-02-18 16:40:16 752

原创 Android8.0 bindService源码解析

1.AMS的bindService我们从调用bindService方法开始来看bindService(intent,serviceConnection, Context.BIND_AUTO_CREATE);我们点击进入bindService方法,进入到了Context中的bindService中,而这个方法是一个抽象方法,而这个方法的具体实现其实是ContextWrapper中,所以我们直接看ContextWrapper的bindService方法 @Override p

2022-01-26 17:34:34 2530 2

原创 Android7.0 bindService源码解析

看到标题的时候,有些同学可能会有些质疑:现在都Android12了,你讲Android7,是不是太过时了。这里有两个原因:(1)Android8.0和Android7.0的源码有些不同,但是Android8.0和Android12的区别不是很大,所以之后我会再写一篇关于Android8.0的bindService源码的解析(2)Android8.0开始,很多地方由AIDL生成,所以代码细节被隐藏了,看不见,直接去看Android8.0的话,思路会有断开的地方。而对比Android7.0来看的话,就会很明白:

2022-01-26 16:25:30 2251

原创 Android Parcel数据传输源码解析

想要深入的学习Binder跨进程通信,Parcel是必须要学习的内容之一。Parcel肩负着Binder中数据传输的重任。了解AIDL的同学,对Parcel应该不会太陌生,如果不了解,请移步上一篇文章《Android AIDL的基本使用》。废话不多说,我们直接进入正题!Parcel这个类在Java层,JNI层,Native层都有相应的实现,而Java层的Parcel更多是写入和写出功能的封装,具体的数据装载和取出是在Native层,相关文件路径如下:\frameworks\base\core\ja

2022-01-21 13:00:37 2849

原创 Android AIDL的基本使用

Android AIDL的基本使用

2022-01-06 14:39:26 1984

原创 Battery Historian2.0 配置及遇坑

Battery Historian是App电量调优的工具,最近安装了这个工具,在安装过程中,不断遇坑,最后也总算是坑里调了出来,我们一步一步来看安装Battery Historian到底需要注意些什么?一、环境配置官网地址:https://github.com/google/battery-historian相关博客:https://www.jianshu.com/p/378cf678bdeb我贴了两个网址,一个是官网的,一个是某博主翻译后的,内容基本差不多哦。安装Battery His

2021-09-23 19:10:25 1555 5

原创 引入Kotlin导致 java.util.zip.ZipException: zip file is empty

最近学习了Kotlin的东西,总感觉Android开发中Kotlin逐步取代了Java,不管取代不取代,学习总是没错的。其实之前也是也有学过,不过没有实际的应用到项目中,慢慢的就忘记了,所以我这次准备拿公司的项目来开刀,没想到,刚一开始就出现了如题的问题。问题很简略,没有写到具体的问题,所以很茫然,差了很多资料,最后发现是Aspectjx的问题,真是悲剧。参考文章:https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx/is

2021-08-13 16:20:05 355

原创 多git账户时的ssh配置

为git配置ssh的作用我就不过多描述了,配置成功之后,每次push的时候就不需要输入账号密码了。如果电脑中只有一个git账号,其实配置起来问题不大,基本上不会出现什么问题,我简单描述一下过程一.单git账户时配置SSH首先我们先将路径切换到.ssh路径下,键入以下指令ssh-keygen -t rsa -C "你的git账户"之后会出现如下提示三个红色箭头的地方,直接回车即可,这时候会在文件夹中生成id_rsa,id_rsa.pub使用文本编辑器打开id_rsa.pub,将其

2021-08-09 16:38:33 404

原创 JVM---G1中的RSet和卡表

关于跨代引用和YGC什么的我就解释了,如果描述清楚的话,又要写一大篇,况且网上关于这些概念的解释有很多,我这里只说一下几个我理解错和理解好长时间的地方。参考文章《JVM(十二)记忆集和卡表》《JVM之记忆集和卡表》RegionRegion这个概念,我一直理解错了,看了很多博客,从博主贴的图上理解一直以为一个对象是一个Region,其实不是,Region中可以包含一个或多个对象,Region中的对象类型有Eden,Survivor,Old,Humongous。Humongous是大对象,当

2021-06-22 16:03:34 1740 2

原创 JVM---理解G1的SATB和CMS的增量更新

关于G1,CMS,SATB,增量更新这些概念我就废话了,如果学习了JVM,我相信这些概念不是什么问题,这里我只说一下在学习过程中,糊涂了很长时间之后又通透了的地方。参考文章《三色标记的漏标问题及两种解决方案》相信大家都知道,CMS和G1在并发标记的时候才用了三色标记的方法,但是这种标记在并发的情况下会有漏标的问题。CMS先说CMS,CMS采用的是增量更新的方法,也就是说CMS只关心引用的增加,不关心引用的删除,我用图片举一个例子:CMS在进行并发标记的时候,n和a之间的引用断开了,但

2021-06-21 19:03:06 2559 1

转载 Android hdpi ldpi mdpi xhdpi xxhdpi适配详解

1、了解几个概念(1)分辨率。分辨率就是手机屏幕的像素点数,一般描述成屏幕的“宽×高”,安卓手机屏幕常见的分辨率有480×800、720×1280、1080×1920等。720×1280表示此屏幕在宽度方向有720个像素,在高度方向有1280个像素。(2)屏幕大小。屏幕大小是手机对角线的物理尺寸,以英寸(inch)为单位。比如某某手机为“5寸大屏手机”,就是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米。(3)密度(dpi,dotsperinch;或PPI,pixelsperin...

2021-03-24 18:26:56 4756

原创 Android RecyclerView源码完全解析

抽出了几天的时间,看了一下RecyclerView和ListView的源码,对这两个控件有了更深的理解。RecyclerView是平时经常用的,一直以为已经完全替代了ListView。但是深层次的学习了这两个View之后,才明白是各有所长吧。ListView的源码和原理,相对来说更加简单些,这里推荐郭霖的文章《Android ListView工作原理完全解析,带你从源码的角度彻底理解》,郭神出品,必是精品!2015年的文章了,但还没有过时。在不同的SDK中,ListView源码会有一些变化,View的绘制也

2021-03-12 12:20:31 3276 8

原创 Hermes框架使用及流程分析

Hermes是Android中的跨进程通信框架,由饿了么出品。主要使用Binder来实现的跨进程通信。跨进程通信在Android中很重要,但是实现起来可以说稍微有些麻烦,尤其在两个进程通信的数据类型很多时,要写的中间文件或者AIDL文件就很多。而Hermes很好的解决了这个问题,完全不用你去写Binder文件或者AIDL文件。由于Hermes是在16年开发的,之后一直没有维护,所以直接使用会报错。估计这也是Hermes一直没有火起来的原因吧,毕竟跨进程通信不了解的同学来说,使用的时候报错就直接抛弃了。报错的

2021-02-23 17:33:39 1780 1

原创 EventBus面试题

看了几天的EventBus,根据自己的理解,自拟了几道面试题,我这里只给出题目,就不给出答案了,第一因为我感觉这些题相对比较简单,第二答案虽然都是一样的,但是每个人的描述都不尽相同1.有这么一种情况:A类实现了B接口,Test1Activity注册了EventBus,并且其中test方法被Subscribe注释,问题一:如果方法的参数为A类,Test2Activity中进行了post操作,事件类型为B,Test1Activity的test方法可以接收到事件吗问题二:如果方法的参数为B类,Test2A

2021-01-16 19:58:27 1456

原创 EventBus源码---索引原理探究

公司的项目终于到了测试阶段,自己的时间也充裕了起来。今天有时间,我们把EventBus的索引说一下。我们以自动生成索引为例去说,当然我们这里不说APT的内容,仅仅说一下APT生成后的代码,及在EventBus中索引的应用。我们以上篇的代码为例,进入MyEventBusIndex查看,以下的代码就是APT自动生成的public class MyEventBusIndex implements SubscriberInfoIndex { private static final Map<

2021-01-16 19:34:21 168 1

原创 EventBus源码---索引优化的使用

搞了4个小时左右,终于把EventBus的索引优化弄明白了。这里的明白是知道怎么使用了,源码的话,我们下篇文章来说。所以这篇文章我们仅从使用上面来说索引优化。有的同学可能会说,使用嘛,即便是没用过,百度一下也就OK了。以下两点,是我要写这篇博客的原因:(1)我问了我身边做Android开发的朋友,他们使用EventBus都没有使用过索引优化,不使用索引优化也没有感觉EventBus慢。既然这样,谁还会去理这个索引优化呢?所以,大家好像都不怎么关心索引优化。我们要想技术上高人一等,就要知道别人所不知道的

2021-01-02 17:56:49 2191 4

原创 EventBus源码---sticky属性探究

EventBus的粘性特征,我之前并没有看过它的流程代码,以为会略微复杂一点,今天看一下,发现原来是我想多了,真的是简单到没必要说的那种,不过毕竟之前说了之后来讲,那就简单说一下吧。关于粘性特征,从以下几个地方去说:postSticky,registerpostSticky我们看一下这个方法的源码 public void postSticky(Object event) { synchronized (stickyEvents) { sti.

2020-12-28 11:38:23 268

原创 EventBus源码---线程切换探究

关于EventBus的线程切换,我们单独放在这篇文章里。我们直接进入正题。我们先看看枚举类ThreaModepublic enum ThreadMode { POSTING, MAIN, MAIN_ORDERED, BACKGROUND, ASYNC}POSTING:消息订阅者将与发送者所处在同一线程中。这是默认值。该模式避免了线程切换所带来的开销。这是处理简单事务所推荐的模式。如果发布线程是主线程,使用该模式必须立即返回,以避免阻塞主线程。MAI

2020-12-28 11:07:51 239

原创 EventBus源码---post流程分析

11111111

2020-12-27 18:03:59 429

原创 EventBus源码---register流程分析

本来最近想好好看一下Android的源码,看到Binder的时候,发现好多类都被隐藏了,需要下载源码(有6.0的,感觉太老了,不想用),源码的体积有点大,9.0的大概在40个G左右,公司又要求不能下载比较大的文件,只能等到周末在家下载了。系统源码看不了,就撸一撸三方框架的源码,这次决定看一看EventBus源码。之前的时候,看过EventBus源码,架构思想上比较简单,属于轻量级框架,代码也没多少,这里回顾的时候,发现思想简单不代表代码简单,好多细节处理的地方都值得我们来借鉴学习。关于EventBus的博客

2020-12-25 18:34:20 291

原创 Android源码---Handler

关于Handler的源码流程,我也看过很多遍,却没有认真的写过一篇博客,每次想看的时候都要上网去找一些博客。这次我想自己认真的写一篇Handler的博客,好供自己还有需要的人学习。说到Handler相信大家都不陌生,谁的项目中还没用过Handler呢,是吧。这篇博客,我打算从源码中来撸Handler的流程,对于Handler的时候,我就不再这里废话了。一、源码提到Handler就一定要说的四个类:Message,MessageQueue,Looper,Handler。我在网上看到一篇博客,对

2020-12-21 14:21:11 116 1

原创 Android源码---ThreadLocal

最近在看ThreadLocal源码,学到了很多的东西,本来想写几篇博客来加深印象,但是对于ThreadLocal的实践很少,怕写的有错;再者,网上关于ThreadLocal的博客非常多,质量也非常好,如果自己写的话,质量不一定要比这些好;而且公司最近又忙起来了,所以我直接就推荐几篇我看过的。之后有时间再来补上也行~手撕面试题ThreadLocal!!!【JAVA并发编程系列】ThreadLocal面试官:知道ThreadLocal嘛?谈谈你对它的理解?(基于jdk1.8)...

2020-12-18 10:25:37 146

原创 ThreadLocal源码分析---ThreadLocalMap中的Entry

最近公司的项目终于快结束了,终于有时间执行下个阶段的学习了,这个阶段我主要是看一下Android系统的源码。首先从Handler开始,Handler看过很多次,也是烂大街的东西了。每次看的时候,ThreadLocal基本上都被我略过了,这次我想仔细的研究一下,然后发现了好多新大陆,而ThreadLocal也是多线程中比较重要的东西。这次我的博客以短篇为主,不再长篇大论,只研究小知识点,好了,我们进入正题。参考博客:【JAVA并发编程系列】ThreadLocalThreadLocalMap本身就是一个

2020-12-14 11:28:43 1424

原创 JetPack系列---Databinding源码分析

最近撸了一些Jetpack的源码,发现自己阅读源码的能力越来越强了,为自己的努力点赞,相信没有谁的努力会被辜负Databinding本来是第一个就要撸的,但是当我进入源码世界之后,真的是被它弄糊涂了。找了半天没有什么头绪,最后只能把它放在最后来看了。即便是这样,把Databinding捋顺也用了半天的时间,期间还使用了反射来验证,也是麻烦至极。因为Databind所生成的代码文件,都是使用APT编译期生成的,所以我们可以使用debug打断点来找思路,一开始我自己没有注意这点,所以浪费了很多时间。行了,废

2020-11-24 21:16:47 405

原创 JetPack系列---WorkManager源码分析

WorkManager这个任务管理框架还是非常好用的,有人说可以用它替代Service,额,这个我就不太清楚了,不过个人认为替代AsycnTask和JobScheduler应该是没问题,而WorkManager中的循环任务使用的也正是JobScheduler。这里我不去介绍WorkManager的使用,官网和百度都是学习使用的圣地~,我这里只说源码,通过源码看本质,让我们更加透彻的了解WorkManager的原理。一、源码分析对于WorkManager的源码,从三个地方入手分析:WorkManage

2020-11-23 11:39:21 572

原创 JetPack系列---LiveData源码分析

最近公司项目不忙,抽时间把LiveData的源码撸了两边,每撸一次,印象就深刻几分,整体的思路就更加的清晰了,越发的觉得LiveData的源码真的很简单~一、源码分析注:使用的livedata和viewmodel的版本为2.2.0我们在使用LiveData的时候,通常和ViewModel配合来使用。在ViewModel中创建LiveData对象,使用ViewModelProvider创建ViewModel,Owner对象相同,就保证了ViewModel是相同的对象,那么LiveData对象就是相

2020-11-19 12:06:08 307

原创 Kotlin基础学习---面向对象(三)

目录一、属性代理二、数据类一、属性代理什么是代理,请童鞋们自行百度~。那什么是属性代理呢?我们先看下面的例子://代理类class DelegateTest{ var v by Delegates.notNull<Any>() operator fun getValue(thisRef:Any?,property:KProperty<*>):Any{ println("我是DelegateTest中的getValue")

2020-10-12 18:15:02 133

原创 Kotlin基础学习---面向对象(二)

一、方法重载与默认参数Kotlin中的方法重载基本和Java一样,有一点不同的是默认参数的使用。在Java中,如果你想在类中创建一个方法,方法接受一个Int类型的参数,如果不填写参数,默认为-1,你会怎么办?肯定会创建两个方法,一个有参数的,一个没有参数的。但是在Kotlin中只需要一个方法就可以了,使用默认参数的方式,如下代码:fun main(args: Array<Strin...

2020-10-12 10:49:02 110

原创 Glide框架解析---生命周期的介绍(四)

上一篇博客中我们主要介绍了Glide调用的流程,涉及的类还有方法我在交互图中做了详细的介绍,这篇呢我们来介绍一下Glide的生命周期。本来我打算在博客中详细的写出每个类和每个过程,但是涉及的篇幅实在的太多了,所以之后的博客还是以思想为主,具体的源代码我会直接提供出来,当然有不懂的地方可以随时留言提问。1.生命周期的监控Glide是如何实现载体生命周期的监控的呢?其实思想和简单,就是在载体(...

2020-01-29 15:33:54 307

ASM插桩在Android项目中的应用

ASM插桩在Android项目中的应用 博客地址:https://blog.csdn.net/qq_32019367/article/details/125798607

2022-07-16

Breakpad的相关资源

博客中所提到的相关资源,以及我自己的项目 https://blog.csdn.net/qq_32019367/article/details/125184273

2022-06-08

MyGlide.zip

博客地址:https://blog.csdn.net/qq_32019367/article/details/103929375

2020-01-13

MyGlide.zip

博客地址:https://blog.csdn.net/qq_32019367/article/details/103883118

2020-01-09

BigImageView文件及长图.zip

BigImageView文件及测试用到的长图,没放demo,一个文件就能用

2019-05-21

MyPDFProject.zip

项目里目前只有armeabi-v7a的动态库,如果需要支持需要其他CPU架构的动态库和静态库或者有其他问题,可以加我

2019-05-20

JNIProject

根据之前的几篇blog所写的工程,都是一些简单的测试,可以根据几篇博客结合着来看,有问题可以留言~

2018-10-15

TBS中的liblbs.so

TBSjar中的liblbs.so文件,我看见大家好多都在找个,就贴出来了,顺便赚点积分

2018-03-19

My3DViewPager(2)

3D效果的ViewPager,代码简单,详细过程请看博客:http://blog.csdn.net/qq_32019367/article/details/78082186

2017-09-25

My3DViewPager

实现简单的3DViewPager的效果,缩放,透明度等,具体效果请看博客:http://blog.csdn.net/qq_32019367/article/details/78080022

2017-09-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除