HOOK 插件式一键换肤流程分析

换肤流程

首先实现插件式换肤需要知道以下几个流程:

  • 在默认情况下通过 setContentView 设置的资源布局(XML)是如何加载到界面上的
  • 在 Android 5.0 之前的版本和 5.0 之后的版本按钮是不一样的样式,系统是如何做到换肤的
  • 自定义换肤框架,如何知道我们自己的 APK 哪些控件是需要换肤的
  • 如何切换 【皮肤插件 / 默认】的肤色
  • 如何加载资源包插件
  • 重启 APP、进入其他 Activty 如何换肤

Gradle 自定义 plugin 以及项目优化实践

Gradle 是什么?

  • 它是一款强大的构建工具,而不是语⾔
  • 它使用了 Groovy 这个语言,创造了一种 DSL,但它本身不是语⾔

groovy 是什么

Groovy 是一种动态语言,它和 Java 类似(算是 Java 的升级版,但是又具备脚本语言的特点),都在 Java 虚拟机中运行。当运行 Groovy 脚本时它会先被编译成 Java 类字节码,然后通过 JVM 虚拟机执行这个 Java 字节码类

Gradle 的 Project 和 Tasks

每次构建(build)至少由一个 project 构成,一个 project 由一到多个 task 构成。每个 task 代表了构建过程当中的一个原子性操作,比如编译,打包,生成javadoc,发布等等这些操作

Gradle 的构建流程

独立进程通信之悬浮下拉状态栏实践

前言

我们首先先看下这个效果是怎么样的,如果有人见过百度音箱或者是小米音箱,就应该对这个会清楚一些,也就是图示中我们是自定义了一个下拉状态栏,并没有使用系统原生的,那么我们就可以根据需求实现我们自定义的下拉状态栏 UI,比如音乐通知,时间、天气显示信息等等。不过这种需要自定义的情况一般是针对于 Android 定制化的地方会用到的多一些,但本文更多的是牵扯的是如何将这个下拉状态栏运行在独立进程中,以及进程之间的通信,这样的话即使下拉状态栏崩溃了,也不会影响主进程。

Android 事件分发的冲突解决方案

阅读本文前,需要对事件分发机制所有了解,建议先阅读 Android 事件分发机制源码流程分析,但是解决这个问题之前,首先我们要知道,滑动冲突是怎么来的,为什么会存在滑动冲突呢 ?

其实在 Android 中,只要是在界面中内外两层 View 可以同时滑动的时候,这个时候,就会产生滑动冲突了,或者可以理解在同一方向一个 View 上只能响应一组事件序列。当然了,部分情况下,会看到同时滑动的情况,可能是通过特殊的方式,将自己的事件序列传递给其他 View 上面了。

Android 协程编写高效的并发程序

协程是什么

Android 官方文档中的描述是:协程是一种并发设计模式,可以在 Android 平台上使用它来简化异步执行的代码。或者通俗的讲:协程就是一套轻量级线程框架,使用方便,拥有一系列的语法糖

使用

Android 中如果要使用协程,必须添加如下依赖库:

1
2
3
dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
}

如何开启一个协程,最简单的方式就是使用 GlobalScope.launch 函数,如下所示:

1
2
3
4
5
fun main() {
    GlobalScope.launch {
        println("hello world-top-level-coroutine")
    }
}