Glide源码分析与自我实现(三)——APT的使用与GIF的优化

项目Demo地址:GifHelper 什么是APT? APT是Annotation Processing Tool的简称,即编译时注解处理器。它是一个javac的工具,在编译时,通过注解,按照规则自动生成相关代码的工具。 APT与Glide什么关系? 我们通常通过在build.gradle加入这样一段代码来引入G...

Glide源码分析与自我实现(一)——数据加载主流程

本文基于Glide 4.11.0 阅读前请参考Glide 源码分析解读-基于最新版Glide 4.9.0一文,该文章中,将Glide中各个部分的作用分析的非常好了。 Glide几乎是现在做Android图片加载的最佳选择了。如此优秀的一个框架是如何实现的呢?如果让我们自己来实现该怎么做呢?我们就通过自己实现一...

Apk瘦身术

Apk瘦身主要从三方面入手:资源文件、源代码和第三方类库。 一、资源文件1.1 删除无用资源文件1.1.1 Lint工具菜单 -> Analyze -> Run Inspection by Name,然后输入Unused resources便可以执行查找无用资源文件。自己根据需要进行删除。 1.1.2...

ARouter源码分析

在阅读源码前,请先下载源码:ARouter 最近阅读ARouter源码,发现这真的是一个非常优秀的框架。激发出兴趣来读一下他的源码,实际上,这个框架的结构非常简单。这个框架可以分为主流程和辅助流程来拆开分析。 主流程包含编译时和运行时两个部分,其中编译时主要做的是路由路径表的构建,运行时主要做的是路由路径表的加载...

ASM库介绍与使用

原文 前面几篇文章介绍了 .class 文件的结构、JVM 如何加载 .class 文件、JVM 中如何执行方法的调用和访问者模式,其实前面几篇文章都是为这篇文章做铺垫的,如果不知道 .class 文件结构、也不知道在 JVM 中 .class 文件中的方法是如何被执行的,这篇文章中的有些部分可能会看不懂,所...

LeakCanary原理分析

1234dependencies { // debugImplementation because LeakCanary should only run in debug builds. debugImplementation 'com.squareup.leakcanary:leakca...

LaunchMode

此文是阅读《Android 面试黑洞——当我按下 Home 键再切回来,会发生什么?》一文后的总结,视频地址Bilibili、Youtube。 演示代码: 在正式讲解launchMode前,先要理解三个概念:ActivityStack, TaskRecord, ActivityRecord。 1234567891...

Activity启动流程

原文参考:Activity 启动流程分析(Android10) 12345678graph TD;A(启动Activity) --> B[通过Binder调用AMS的startActivity方法] --> C[通过Intent获取到目标Activity] --> D{目标Activi...

AMS启动流程

AMS是ActivityManagerService的简称,看名字,似乎是Activity的manager,实际上,它管理的可不只是Activity。 系统启动流程123456789graph TD; style A fill:#fff style F fill:#5befb9 Z{&...

App保活术

为什么要保活? 因为Android的Low memory killer机制,在系统内存不足的情况下,系统开始根据自身的一套进程回收机制结束一些进程,以便腾出内存给需要的进程。 如何判断内存不足? 判断的阈值在不同手机上是不一样的,一旦低于该阈值,系统就会杀死对应优先级的进程。 在adb shell下,通过如下命令...