自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (9)
  • 收藏
  • 关注

原创 字节码插桩 -- 入门篇

Android Studio --> File --> New --> New Module --> Java or Kotlin Library --> plugin(名字自取)/***/api: Int,/*** 方法开始执行*//*** 方法执行结束*/"append",",false"append",",false",false"d",)I",false。

2024-04-29 16:51:52 577 3

原创 Gradle统一管理依赖

Android 发展至今,各种新技术层出不穷,版本管理也出现了很多方案,这些方案并没有绝对的优劣,还是需要结合实际项目需求来选择的,但是新的方案还是需要学习了解的。

2024-02-21 12:35:51 1426

原创 Jetpack架构组件 (四)-- LiveData使用与原理分析

LiveData 是一个可观察的数据持有者,和常规的observable不同,LiveData 是可以感知生命周期的,也就是说它能够在 Activity、Fragment、Service 中正确的处理生命周期。

2021-12-16 09:13:07 1383

原创 Jetpack架构组件 (三)-- WorkManager使用

一、WorkManager 的介绍WorkManager 是用来执行后台任务的,例如,发送应用程序日志、同步应用程序数据、备份用户数据等。WorkManager 能保证任务一定会被执行,即使应用程序当前不在运行中,甚至在设备重启过后,任务仍然会在适当的时刻被执行。这是因为 WorkManager 有自己的数据库,关于任务的所有信息和数据都保存在该数据库中。因此,只要任务交给了 WorkManager ,哪怕应用程序彻底退出,或者设备被重新启动,WorkManager 依然能够保证完成你交给它的任务。

2021-11-01 14:01:41 1159

原创 Android 屏幕刷新机制与Choreographer全面解读

在 Android 开发过程中,我们经常谈到布局优化、卡顿优化时,通常都知道要减少布局层级、避免主线程做耗时操作等等,这样可以减少丢帧,如果丢帧比较严重的话就会发生明显的卡顿现象。这篇文章我们来详细分析 Android 屏幕刷新机制,便于优化我们的项目。

2020-12-29 16:24:05 18306 1

原创 Android 布局优化方案

在 Android 开发中,UI 布局可以说是每个 App 使用频率很高的,随着 UI 越来越多,布局的重复性、复杂度也会随之增长,这样使得 UI布局的优化,显得至关重要,UI 布局不慎,就会引起过度绘制,从而造成 UI 卡顿的情况,本篇文章就来总结一下 UI 布局优化的相关技巧。

2020-12-28 15:45:31 20765 6

原创 Android 进程保活方案

Android 系统为了保持系统运行流畅,在内存吃紧的情况下,会将一些进程给杀掉,以释放一部分内存。然而,对于一些(如:QQ、微信等)比较重要的、我们希望能及时收到消息的App,需要保持进程持续活跃,那么就需要实施一些保活措施来保证进程能够持续存活,即 Android 进程保活。Android 进程保活一般可以从两个方面进行:运行中保活:提高进程优先级,降低被系统杀掉的概率。 杀掉后拉活:被系统杀掉之后,将进程再拉活(重启)。

2020-12-24 09:35:27 19830 4

原创 Android Studio Plugin —— 自动生成数据库代码的插件

实战制作一个自动生成 Android SQLite 数据库代码的插件

2020-12-11 11:09:46 16858 1

原创 Android Studio Plugin —— 插件开发的基本流程

本篇文章将讲解如何通过 IntelliJ IDEA 工具来编写自定义插件,熟悉插件开发的流程,以及如何打包发布插件的流程。

2020-12-07 15:44:33 17541

原创 Gradle 基本使用

前言Gradle 它是一个基于 JVM 的新一代构建工具,这个系列会针对 Android 开发来对 Gradle 的知识进行精简讲解。Gradle 目前已经应用于多个 Android 开发的技术体系中,比如构建系统、插件化、热修复和组件化等等。一、Gradle 是什么Gradle 是一个构建工具,构建工具用于实现项目自动化,是一种可编程的工具,你可以用代码来控制构建流程最终生成可交付的软件。构建工具可以帮助你创建一个重复的、可靠的、无需手动介入的、不依赖于特定操作系统和IDE 的构建。这么说可能

2020-12-04 16:25:13 16730

原创 Jetpack架构组件 (二)-- Lifecycle原理与使用

前言本篇文章我们将来学习 Android Jetpack 架构组件中的 Lifecycle 组件。Lifecycle 组件是帮忙我们管理 Activity 和Fragment 的生命周期,也就是说,当 Activity 或者 Fragment 的生命周期发生变化的时候我们可以得到通知。我们通常会在生命周期方法中调用各种方法,这就导致生命周期相关方法代码比较臃肿,且耦合性高,不易维护。1. 为什么需要Lifecycle在应用开发中,处理 Activity 或者 Fragment 组件的生命周期相关代码是

2020-10-30 16:30:33 18907

原创 Android 10 完美适配

背景2019 年 9 月 3 日,Google 发布了 Android 10 正式版。Android 10 聚焦移动创新、安全隐私和数字健康三大主题,全面打造最佳的用户体验。在Android 10 版本中,官方的改动较大,相应的开发者适配成本还是很高的。基于前期调研,我们主要基于以下几方面进行Android 10的适配:Android X分区存储设备ID明文HTTP限制1. AndroidXAndroidX 对原始 Android Support库进行了重大改进,后者现在已不再维护。An

2020-10-30 15:09:24 20565 2

原创 Jetpack架构组件 (一)-- Android Jetpack 简介

前言Android 已经发展十多年了,可以说是比较成熟的技术了,一开始时框架很少,也没有什么规范,所有的代码都是要自己写,比如网络请求,数据库操作,数据解析等等。后来出现了一些框架来帮助开发者快速进行开发,比如XUtils、Volley、OKHttp、EventBus等,随着框架越来越多,一个应用可以有多种技术选型,直接导致应用开发越来越不规范,导致做出来的应用质量参差不齐,这显然不是谷歌想看到的。谷歌随后推出了 MVP 和 MVVM相关的官方例子,效果很一般,而且覆盖面只是在架构上,Goole I/O

2020-10-29 14:54:46 19705 1

原创 Android Databinding 详解

Android Databinding 详解​ DataBinding 是Google官方发布的一个框架,用来进行数据绑定。DataBinding 能够省去我们一直以来的 findViewById() 步骤,大量减少 Activity / Fragment 内的代码,数据能够单向或双向绑定到 layout 文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常。​ 使用DataBinding 的方法是在对应的 Module 的 build.gradle 文件里加入如下代码,同步之后就可以引

2020-10-13 15:03:43 22110

原创 Android 高效显示Bitmap图片

Android 高效显示Bitmap图片 本文会介绍一些处理与加载Bitmap对象的常用方法,这些技术能够使得程序的UI不会被阻塞,并且可以避免程序超出内存限制。如果我们不注意这些,Bitmap会迅速的消耗掉可用内存从而导致程序崩溃,出现下面的异常:java.lang.OutofMemoryError: bitmap size exceeds VM budget. 在Android应用中加载Bitmap的操作是需要特别小心处理的,有下面几个方面的原因: 1....

2020-09-24 10:11:08 22483

原创 Android 高效图片压缩

使用libjpeg-turbo进行图片压缩1. JEPG 是什么? 相信有一部分使用 iPhone 手机用微信发送图片的时候,明明图片大小只有 1M ,但清晰度比 Android 手机 5 M 图片大小的还要清晰,那么这是为什么呢 ?。 当时谷歌开发 Android 的时候,考虑了大部分手机的配置并没有那么高,所以对图片处理使用的是 Skia。当然这个库的底层还是用的 jpeg 图片压缩处理。但是为了能够适配低端的手机(这里的低端是指以前的硬件配置不高的手机,CPU ...

2020-09-22 14:57:32 21831

原创 NDK r21b 编译FFmpeg 、x264 提供Android集成

NDK r21b 编译FFmpeg 、x264 提供Android集成 在现今这个阶段,越来越多的app会涉及到音视频,那么学会使用ffmpeg和x264就很有必要了。本篇文章将讲解如何把ffmpeg、x264编译成动态库和静态库。 1. 编译环境 Linux/Ubuntu/Centis都行。在windows环境下可以安装虚拟机或者购买一个云主机,作者在阿里云购买的一个Ubuntu主机。 2. 准备工作 linux ndk下载:https:/...

2020-09-10 10:27:13 21888 1

原创 GLSurfaceView 基本使用与源码解析

GLSurfaceView 的基本使用 在Android 中使用OpenGL ES的过程中,就不得不提到一个控件:GLSurfaceView,本篇博文将结合几个简单的案例分别介绍GLSurfaceView的基本使用以及如何使用GLSurfaceView.Renderer所提供的接口将图形绘制到SurfaceView中。 OpenGL(Open Graphics Library)意为开放图形库,是一个跨平台的图形API,用于指定3D图形处理硬件中的软硬件编程接口。OpenGL一...

2020-08-26 11:52:06 22027

原创 SurfaceView 基本使用

SurfaceView 的基本使用 Android中提供了View进行绘图处理,View可以满足大部分的绘图需求,但是有时候,View却显得力不从心,所以Android提供了SurfaceView给Android开发者,以满足更多的绘图需求。下面就让我们一起来了解一下SurfaceView。1. SurfaceView的作用 View是通过刷新来重绘视图,Android 系统通过发出VSYNC信号来进行屏幕的重绘,刷新的时间间隔是16ms,如果我们可以在16ms以内...

2020-08-24 14:23:50 21910 1

原创 MMKV基本使用与源码解析

MMKV 概述 1. MMKV——基于 mmap 的高性能通用 key-value 组件 MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。GitHub地址:https://github.com/Tencent/MMKV 2.MMKV 原理 1)内存准备:通过 mmap 内存映射文件,提供一段...

2020-08-17 14:48:48 23934 2

原创 ProtoBuf 在Android的使用与原理解析

ProtoBuf 在Android的使用与原理解析 ProtoBuf是Google的一个开源项目。它是一种灵活高效可序列化的数据协议,相于XML,具有更快、更简单、更轻量级等特性。支持多种语言,只需定义好数据结构,利用Protobuf框架生成源代码,就可很轻松地实现数据结构的序列化和反序列化。一旦需求有变,可以更新数据结构,而不会影响已部署程序。 1. 在Android中使用ProtoBuf 1. 在project的build.gradle配置如下 de...

2020-08-14 09:43:09 20517 1

原创 Android dex加密与解密原理及其代码实现

Android dex解密与解密原理及其代码实现 为什么要进行apk加密?答案是避免apk被有心人反编译,窃取公司重要技术和算法等。但是要给Apk加密要如何实现呢?首先我们需要知道Android整个Apk的打包流程,然后将加密的环节插入要其中的步骤中,加密完成后在apk安装之后打开时进行解密。 dex解密与解密分为以下几个步骤: 1)把源 apk(要加固的apk)中的 dex 文件加密。加密之后就不再是正常的 dex 文件,那么市面上的反编译工具就不能按照正常的...

2020-08-08 11:36:35 24810 3

原创 Android的消息机制之Handler源码解析

Android 的消息机制 消息机制在开发中我们会经常遇到,Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去执行。

2020-08-05 10:31:58 19360

原创 Android热修复基本原理

热修复原理 在 Android 应用开发中,热修复技术被越来越多的开发者所使用,也出现了很多热修复框架, 比如 AndFix、Tinker、Dexposed 和Nuwa 等。如果只是会这些热修复框架的使用意义并不大 ,我们还需要了解它们的原理 ,这样不管热修复框架如何变化,只要基本原理不变,我们就可以很快地掌握它们。这一章不会对某些热修复框架源码进行解析,而是讲解热修复框架的通用原理。建议阅读本文之前最好先阅读“解析ClassLoader”这篇文章的内容。 1. 热修复的产生...

2020-07-28 15:58:38 20137

原创 深入理解Java和Android中的ClassLoader

解析ClassLoader 我们知道Dalvik(DVM)和ART加载的是dex文件,而JVM加载的是Class文件,因此Android和Java的类加载器ClassLoader是有去别的,因此本文分别介绍Java中的ClassLoader和Android中的ClassLoader。 1. Java中的ClassLoader 1.1 ClassLoader的类型 Java中的类加载器主要有两种类型,分别是系统类加载器和自定义类加载器。其中系统类加载器包括...

2020-07-27 16:50:32 19226

原创 解析WindowManagerService

解析WindowManagerService WindowManagerService(以后简称WMS)它是 WindowManager 的管理者, WMS 无论对于应用开发还是 Framework 开发都是重要的知识点,究其原因是因为 WMS 有很多职责,每个职责都会涉及重要且复杂的系统。 WMS 的职责主要有以下几点。 1. 窗口管理:负责窗口的启动、添加和删除。另外窗口的大小和层级也是由WMS进行管理的。窗口管理的核心成员有DisplayContent、WindowT...

2020-07-27 09:44:56 20711

原创 解析WindowManager

解析WindowManager WindowManager是于WindowMangerService(以后简称WMS)关联最紧密的类,因为,为了更好的理解WMS,需要先了解WindowManager的相关知识,本文将基于Android8.1.0系统来介绍WindowManger的体系、Window的属性和Window的操作。 1.Window、WindowManager 和WMS Window 它是一个抽象类,具体的实现类为 PhoneWindow ,它对 Vi...

2020-07-13 11:43:21 20239

原创 解析ActivityManagerService

解析ActivityManagerService Android 系统启动过程、应用程序进程启动过程以及四大组件工作过程,都涉及了 ActivityManagerService(以后简称AMS),本文将基于Android8.1.0系统来对AMS进行讲解。 1. AMS 的启动过程 要想更好地理解 AMS ,很有必要了解 AMS 的启动过程, AMS 的启动是在 SystemServer进程中启动的,关于 SystemServer 进程的启动过程在“Andro...

2020-07-13 11:35:05 20754 2

原创 解析Android中的Context

理解上下文 Context Context 也就是上下文对象,是 Android 常用的类,但是对于 Context ,很多人都停留在会用的阶段,本文将带领大家从源码的角度来分析 Context ,从而更加深入地理解它。本文基于Android8.1.0系统分析Context。 1.Context 的关联类 Context 意为上下文,是 个应用程序环境信息的接口。 在开发中我们经常使用 Context ,它的使用场景总的来...

2020-07-09 17:18:06 19129

原创 解析BroadcastReceiver的注册、发送与接收过程

广播的注册、 发送和接收过程

2020-07-09 14:55:03 19199

原创 解析Service的绑定过程

Service的绑定过程 我们可以通过调用Context 的 startService方法来启动Service,也可以通过Context 的bindService方法来绑定Service,绑定Service的过程要比启动Service的过程要复杂一些,首先建议先阅读“解析Service的启动过程”这篇文章,结合Service的启动过程会有更好的理解。 Service 的绑定过程将分为两个部分来进行讲解,分别是 Contextlmpl 到AMS 的调用过程和ActivityThre...

2020-07-09 09:39:16 19982

原创 解析Service的启动过程

Service 的启动过程 Service 的启动过程和根 Activity 启动过程有部分相似的知识点,另外 Service 启动过程涉及上下文 Context 的知识点,这里只关注流程而不会详细介绍 Context ,Service 的启动过程将分为两个部分来进行讲解,分别是 Contextimpl到ActivityManageService 调用过程和 ActivityThread 启动 Service。本文基于Android8.1.0系统分析Service的启动过程...

2020-07-02 16:26:30 19958

原创 解析Activity的启动过程

Activity启动过程 Activity 的启动过程分为两种, 一种是根 Activity 的启动过程,另一种是普通Activity(子Activity)的启动过程。 根Activity:以快捷图标的形式显示在Launcher中,它的启动过程代表了一个Android应用程序的启动过程。 子Activity:由根Activity或其他子Activity启动,他们有可能与启动他们的Activity运行在同一个进程中,也可能运行在不同的进程中。 ...

2020-06-20 15:08:55 21917

原创 Android系统中应用程序进程的启动过程

应用程序进程启动过程 当Android系统启动完成之后,我们安装的应用程序又是如何启动的呢?启动一个应用程序首先要保证该应用程序的进程已经被启动,本篇文章我们就基于Android8.1系统来分析应用程序进程启动过程。需要注意,是“应用程序进程启动过程”,不是“应用程序启动过程”。 1 应用程序进程简介 要想启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经启动。 AMS 在启动应用程序时会检查这个应用程序需要的应用程序进程是否存在,不存在就会请求Zyg...

2020-06-19 09:51:07 21520

原创 Android系统启动流程(4) —— 解析Launcher启动过程

相关文章Android系统启动流程(1) ——解析init进程启动过程Android系统启动流程(2) ——解析Zygote进程启动过程Android系统启动流程(3) ——解析SystemServer进程启动过程Launcher启动过程 此前已经学习了 Android 系统启动流程的 nit 进程、 Zygote 进程和 SystemServer 进程, 最后我们来学习 Launcher 的启动过程。这篇文章主要分析Android8.1系统的Launc...

2020-06-16 13:57:45 22259

原创 Android系统启动流程(3) —— 解析SystemServer进程启动过程

相关文章Android系统启动流程(1) ——解析init进程启动过程Android系统启动流程(2) ——解析Zygote进程启动过程SystemServer 启动过程 SystemServer 进程主要用于创建系统服务,我们熟知的 AMS、WMS和PMS 都是由它来创建的,因此掌握 SystemServer 进程是如何启动的,它在启动时做了哪些工作是十分必要的,这篇文章主要分析Android8.1系统的SystemServer进程的启动流程。 1. Z...

2020-06-15 14:41:17 21630

原创 Android系统启动流程(2) —— 解析Zygote进程启动过程

在Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由zygote进程孕育(fork)出来的,这也许就是为什么要把它称为Zygote(受精卵)的原因吧。由于zygote进程在Android系统中有着如此重要的地位,本文将详细分析它的启动过程。

2020-06-12 16:51:08 21381

原创 Android系统启动流程(1) —— 解析init进程启动过程

前言 本系列文章简要介绍 Android 系统启动的流程,不会拘泥于源码细节,旨在让读者了解大概的流程。另外,需要提醒大家注意的一点是,阅读本章需要有一定的 C/C++基础,在这个流程中会涉及到很多重要的知识点,这个系列我们就来一一讲解它们,这一篇我们就来学习init进程,本系列文章都将基于Android8.0源码来分析Android系统的启动流程。1 init 进程启动过程 init进程是Android系统中用户空间的第一个进程,进程号为1,是Android系统启动...

2020-06-11 15:46:57 22785

原创 深入理解Java注解(注解在Android中的应用)

在许多程序设计语言里,比如 Java、C#,依赖注入是一种较流行的设计模式,在 Android开发中也有很多实用的依赖注入框架,可以帮助我们少写一些样板代码,达到各个类之间解耦的目的,因此掌握并深入理解注解对于一个Java工程师是来说是很有必要的事。本篇我们将通过以下几个角度来分析注解的相关知识点。一 注解 从JDK 5开始,Java增加了注解,注解是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用注解,开发人员可以在不改变原有逻辑的情...

2020-06-05 10:31:17 21512

原创 EventBus基本使用与源码解析

一 解析EventBus EventBus是一款针对Android优化的发布-订阅事件总线。它简化了应用程序内各组件间、组件与后台线程间的通信。其优点是开销小,代码更优雅,以及将发送者和接收者解耦。当一个Android应用功能越来越多的时候,保证应用的各个部分之间高效的通信将变得越来越困难。所以为了解决这个问题,EventBus应运而生!1.1 EventBus概述 在讲到 EventBus 的基本用法之前,我们需要了解 EventBus 的三要素以及它的 4 种Th...

2020-06-04 15:02:31 21522

loader-bitmap.zip

Android高效图片加载,根据显示控件大小缩放图片后显示降低内存占用,自定义内存缓存与磁盘缓存。

2020-09-24

ApkEncrypt.zip

Android加固原理, dex加密与解密原理,实现市面上apk加固软件的功能,代码结构清晰,注释非常详细。

2020-08-10

InstantRunSourceCode.zip

Android 中 Instant Run的源码,非常全面,便于研究Instant Run的原理和热修复框架的原理。

2020-07-28

Annotation.zip

注解在Android中的应用,构建运行时注解处理器和编译时注解处理器,通过Javapoet动态生成代码

2020-06-05

RecyclerView_ItemTouchHelper-master.zip

Android 高级UI, RecyclerView使用ItemTouchHelper实现拖拽和侧滑删除

2020-04-30

android-7.1.2_r1.txt

Android 7.1.2_r1 系统源码。Android 7.1.2_r1 系统源码百度网盘下载,资源可靠。

2019-12-23

AirScreen1.8 - AirPlay & Google Cast & Miracast APK

这个可以安装在Android智能电视或电视盒子上的, 安卓 苹果手机都可以投到电视盒子上,投屏软件。目前最新版.

2019-09-11

通用的MVP框架封装

一款通用的MVP框架封装,包括在Activity和Fragment中的使用,代码结构清晰,使用方便。

2018-09-29

MVP通用框架封装

一个通用的优雅的MVP框架封装和具体是使用方式,使用方便,结构清晰。

2018-09-28

空空如也

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

TA关注的人

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