
进阶之路
文章平均质量分 87
gdutxiaoxu
这个作者很懒,什么都没留下…
展开
-
Android gradle dependency tree change(依赖树变化)监控实现
在项目开发中,会有很多第三方依赖,通过 gradle 引入进来的。比如 androidxDesignVersion、androidxSupportVersion、 rxjava2Version、 okhttpVersion 等第三方库。有时候第三方库改到了或者升级了,我们并不能及时发现,往往需要等到出问题的时候,去排查的时候,才发现是某个依赖版本改动导致的。这时候其实是有点晚了,如果能够提前暴露,那么我们能够大大地减少风险,因此我们希望能够监控起来。原创 2023-09-21 17:25:21 · 948 阅读 · 2 评论 -
Android 滑动事件消费监控,Debug 环境下通用思路
Android 开发中,经常会遇到滑动事件冲突。在一些简单的场景下,我们如果能够知道是那个 View 拦截了事件,那我们能够很容易得解决。解决方法通常就是内部拦截法或者外部拦截法。[ViewPager,ScrollView 嵌套ViewPager滑动冲突解决](https://blog.youkuaiyun.com/gdutxiaoxu/article/details/52939127)然而,在一些复杂场景下,比如在直播间。很多时候,我们很难定位到是哪个 View 拦截了事件。有时候排查起来比较困难,于是,我原创 2023-09-19 16:52:03 · 522 阅读 · 0 评论 -
【踩坑】Android 编译线程爆了, gradle 内存 OOM 解决之路
可以看到,我们这次的问题解决思路大概是这样的。从 error 日志排查发现,很有可能跟 transfrom 相关排查项目里面 transfrom 相关的,有没有相关的dump JVM 内存,看线程相关的,观察是否异常debug gradle assemble 任务,观察 线程名包括Thread 的调用堆栈分析 调用堆栈,找到原因结合 gradle 官方代码,查看问题是否已经解决那有没有更快的方法呢?原创 2022-09-16 16:53:50 · 1274 阅读 · 1 评论 -
面试官,怎样实现 Router 框架?
Android 开发中,组件化,模块化是一个老生常谈的问题。随着项目复杂性的增长,模块化是一个必然的趋势。除非你能忍受改一下代码,就需要六七分钟的漫长时间。模块化,组件化随之带来的另外一个问题是页面的跳转问题,由于代码的隔离,代码之间有时候会无法互相访问。于是,路由(Router)框架诞生了。目前用得比较多的有阿里的 ARouter,美团的 WMRouter,ActivityRouter 等。...原创 2019-11-26 19:43:34 · 2818 阅读 · 1 评论 -
一步步带你读懂 Okhttp 源码
前言okHttp, square 公司开源的网络请求神器,截止到 2019-09-02,在 Github 上面已经超过 34K 的 star,足见他的受欢迎程度。到目前为止,他的最新版本是 4.1.0, 使用 kotlin 语言写的,由于本人对 kotlin 语言不是很熟悉,这篇文章已 3.5.0 的版本为基础进行分析。简介Rxjava+Okhttp+Refrofit 如今已经成为项目网...原创 2019-09-04 19:28:32 · 2607 阅读 · 1 评论 -
Android Hook 机制之简单实战
简介什么是 HookHook 又叫“钩子”,它可以在事件传送的过程中截获并监控事件的传输,将自身的代码与系统方法进行融入。这样当这些方法被调用时,也就可以执行我们自己的代码,这也是面向切面编程的思想(AOP)。Hook 分类1.根据Android开发模式,Native模式(C/C++)和Java模式(Java)区分,在Android平台上 Java层级的Hook; ...原创 2019-08-06 10:11:44 · 60228 阅读 · 9 评论 -
自定义 behavior - 完美仿 QQ 浏览器首页,美团商家详情页
使用CoordinatorLayout打造各种炫酷的效果自定义Behavior —— 仿知乎,FloatActionButton隐藏与展示NestedScrolling 机制深入解析 一步步带你读懂 CoordinatorLayout 源码自定义 Behavior -仿新浪微博发现页的实现ViewPager,ScrollView 嵌套ViewPager滑动冲突解决前言记得两年前的时候...原创 2019-03-10 20:15:47 · 10580 阅读 · 2 评论 -
Android Hook Activity 的几种姿势
这篇博客已 API 27 的源码为基础分析前言在上一篇文章中,我们介绍了 Hook 的要点Hook 的选择点:静态变量和单例,因为一旦创建对象,它们不容易变化,非常容易定位。Hook 过程:寻找 Hook 点,原则是静态变量或者单例对象,尽量 Hook public 的对象和方法。选择合适的代理方式,如果是接口可以用动态代理。偷梁换柱——用代理对象替换原始对象。And...原创 2018-08-06 19:35:28 · 13067 阅读 · 13 评论 -
一步步拆解 LeakCanary
一步步拆解 LeakCanary前言内存泄露,一直是我们性能优化方面的重点。今天,就让我们一起来拆解 LeakCanary,一步步理解它的原理 原理概览讲解 LeakCannary 原理之前,我们先来说一下它的主要原理,给大家吃颗定心丸,其实挺简单的,大概可以分为以下几步:监听 Activity 的生命周期在 onDestroy 的时候,创建相应的 Refrence 和...原创 2018-06-20 21:27:06 · 2389 阅读 · 2 评论 -
java 源码系列 - 带你读懂 Reference 和 ReferenceQueue
从基础讲起Reference主要是负责内存的一个状态,当然它还和java虚拟机,垃圾回收器打交道。Reference类首先把内存分为4种状态Active,Pending,Enqueued,Inactive。 - Active,一般来说内存一开始被分配的状态都是 Active, - Pending 大概是指快要被放进队列的对象,也就是马上要回收的对象, - Enqueued 就是对...原创 2018-06-19 20:21:34 · 10468 阅读 · 3 评论 -
Rxjava 2.x 源码系列 - 变换操作符 Map(上)
Rxjava 2.x 源码系列 - 基础框架分析Rxjava 2.x 源码系列 - 线程切换 (上)Rxjava 2.x 源码系列 - 线程切换 (下)前言在前几篇博客中,我们介绍了 Rxjava Observable 与 Observer 之间是如何订阅与取消订阅的,以及 Rxjava 是如何控制 subsribe 线程和 observer 的回调线程的。今天,让...原创 2018-06-13 20:45:19 · 1213 阅读 · 0 评论 -
Rxjava 2.x 源码系列 - 线程切换 (下)
在上一篇博客Rxjava 2.x 源码系列 - 线程切换 (上)我们讲解到,Observable#subscribeOn 是如何控制上游 Observable 的执行线程的,他的实质是将 Observable#subscribe(Observer) 的操作放在了指定线程,当我们调用 subcribe 的时候,它的过程是从下往上的,即下面的 Observable 调用上面的 Observable。用下面的流程图表示如下。原创 2018-06-06 19:28:43 · 1733 阅读 · 1 评论 -
Rxjava 2.x 源码系列 - 线程切换 (上)
Rxjava 2.x 源码系列 - 基础框架分析前言在上一篇博客 Rxjava 源码系列 - 基础框架分析,我们分析了 Rxjava 的基础框架。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer,并且回调 Observer 的相应的方法。用一张简单的流程图描述...原创 2018-06-05 10:16:44 · 2424 阅读 · 1 评论 -
Rxjava 2.x 源码系列 - 基础框架分析
前言RxjavaRxAndroid本篇博客讲解的 Rxjava 的原理基于版本 2.1.4,RxAndroid 的原理的版本基于 2.0.2 。基本框架Rxjava 有四个基本的概念Observable (可观察者,即被观察者) Observer (观察者)subscribe (订阅) 通过该方法,将 Observable 与 Observer 关联起来...原创 2018-05-29 20:42:13 · 4670 阅读 · 3 评论 -
自定义 Behavior - 仿新浪微博发现页的实现
效果图我们先来看一下新浪微博发现页的效果:接下来我们在来看一下我们仿照新浪微博实现的效果实现思路分析我们这里先定义两种状态,open 和 close 状态。open 状态指 Tab+ViewPager 还没有滑动到顶部的时候,header 还 没有被完全移除屏幕的时候close 状态指 Tab+ViewPager 滑动到顶部的时候,Header 被移除屏幕的时候 从效果图,我们可以看到 在原创 2017-05-12 15:20:12 · 18385 阅读 · 5 评论 -
一步步带你读懂 CoordinatorLayout 源码
一步步带你读懂 CoordinatorLayout 源码使用CoordinatorLayout打造各种炫酷的效果自定义Behavior —— 仿知乎,FloatActionButton隐藏与展示NestedScrolling 机制深入解析 一步步带你读懂 CoordinatorLayout 源码前言记得在去年的时候,就写过一篇博客使用CoordinatorLayout打造各种炫酷的效果,里面介绍了......原创 2017-05-11 22:16:57 · 7518 阅读 · 1 评论 -
NestedScrolling 机制深入解析
NestedScrolling,简称嵌套滑动使用它可以实现一些非常绚丽的效果。如知乎的效果,UC 首页的效果,新浪微博发现的效果等。原创 2017-05-10 17:26:59 · 8221 阅读 · 5 评论 -
butterknife 源码分析
因为在 Android 开发的过程中, 泛型,反射,注解这些知识进场会用到,几乎所有的框架至少都会用到上面的一两种知识,如 Gson 就用到泛型,反射,注解,Retrofit 也用到泛型,反射,注解 。学好这些知识对我们进阶非常重要,尤其是阅读开源框架源码或者自己开发开源框架。今天,这篇博客来带大家一起来阅读以下 ButterKnife 的源码原创 2017-05-09 22:50:38 · 4095 阅读 · 2 评论 -
Android 编译时注解 —— 语法详解
为什么要写这一系列的博客呢?因为在 Android 开发的过程中, 泛型,反射,注解这些知识进场会用到,几乎所有的框架至少都会用到上面的一两种知识,如 Gson 就用到泛型,反射,注解,Retrofit 也用到泛型,反射,注解 。学好这些知识对我们进阶非常重要,尤其是阅读开源框架源码或者自己开发开源框架。java Type 详解java 反射机制详解注解使用入门(一)Andro...原创 2017-04-26 20:03:06 · 4198 阅读 · 0 评论 -
Android 自定义编译时注解1 - 简单的例子
java Type 详解java 反射机制详解注解使用入门(一)前言记得去年的时候写过一篇博客 注解使用入门(一),这篇博客主要介绍了注解的一些基本知识,以及基于运行时注解的 Demo。今天这篇博客主要介绍怎样编写编译时注解的Demo。这篇博客代码参考了鸿洋的博客: Android 打造编译时注解解析框架 这只是一个开始注解的重要知识我们先复习一下注解的一些重要知识:根据注解使用方法和用途,我们可以原创 2017-04-19 19:17:10 · 3551 阅读 · 2 评论 -
Java 反射机制详解
为什么要写这一系列的博客呢?因为在 Android 开发的过程中, 泛型,反射,注解这些知识进场会用到,几乎所有的框架至少都会用到上面的一两种知识,如 Gson 就用到泛型,反射,注解,Retrofit 也用到泛型,反射,注解 。学好这些知识对我们进阶非常重要,尤其是阅读开源框架源码或者自己开发开源框架。java Type 详解java 反射机制详解注解使用入门(一)反射机制什么是反射机制简单来说,原创 2017-04-01 20:35:41 · 28485 阅读 · 2 评论 -
注解使用入门(一)
注解使用入门(一)本篇博客要讲解主要分为以下几个问题注解的相关知识点基于运行时的注解的例子解析说明注解的相关知识点提到注解,大多数人应该都不默认,在我们程序中见到的@Override,@Deprected,@SupressWarnings等等,这些都是注解,只不过是系统自己封装好的,而我们平时比较少去深入理解是怎样实现的?1)什么是注解(Annotation):Annotation(注解)就是原创 2016-07-24 22:56:42 · 5979 阅读 · 1 评论