0%

概述

基础用法里讲了 Dagger 的一些基础用法,但实际项目开发中很多不会这么使用,比如在 Android 实际开发中,我们需要用到许多 Activity 与 Fragment, 当进行依赖注入时都需要进行许多重复性的操作,比如在 @Component 的组件中加入 inject 方法,并在对应的 Activity 或 Fragment 等中调用注入的方法。于是 Android 与 Dagger 团队一起为这些场景提供了更简便的实现方式,这在实际开发中更有实用价值。

另外这篇文章还会学习一下 Dagger 中一些注解的用法。

阅读全文 »

概述

Dagger 的名字取自有向无环图 DAG (directed acyclic graph),因为程序里的依赖关系拼接起来就是一个或者多个有向无环图。

首先理解一下什么是依赖注入。一个类 UserRepository 中有一个 UserRemoteDataSource 类型的属性, 那 UserRemoteDataSource 便是 UserRepository 的依赖,初始化这个依赖可以有两种方法,一种是在类内部自己初始化,另一种是由外部初始化(即是依赖注入,关键在于初始化是谁做的)。

这种由外部初始化的方式都可以叫做依赖注入,而 Dagger 则为依赖注入提供了一种更简单的方式。

阅读全文 »

概述

JNI 是 Java Native Interface 的简写,可以译作 Java 原生接口。

JNI 定义了两个关键数据结构,即 JavaVMJNIEnv, 两者本质上都是指向函数表的二级指针。

  • JavaVM: Java 虚拟机在 JNI 层的代表,理论上每个进程可以有多个 JavaVM, 但在 Android 中一个进程只允许有一个 JavaVM。
  • JNIENV: 代表了 Java 在本线程的运行环境,每个线程都有一个。无法在线程之间共享 JNIEnv, 如果一段代码无法通过其他方法获取自己的 JNIEnv,则应该共享相应的 JavaVM,然后使用 GetEnv 发现线程的 JNIEnv。
阅读全文 »

概述

  • Android Studio 用于构建原生库的默认工具是 CMake,需要提供 CmakeList.txt 用于构建原生代码。
  • Android Studio 还支持 ndk-build 构建原生库,需要提供 Android.mk 构建脚本。
阅读全文 »

概述

最近想学习一下 Kotlin 中 flow 的用法, Google 上搜了搜发现很多比较 RxJava 和 flow 的文章,其实我在实际业务中从来没有用过 RxJava, 倒不是因为它不好,而是…我一直傻傻不太会用 RxJava 的操作符,看不太懂,又一直没花时间(懒惰)去研究它那些操作符的原理,就一直不怎么敢用。这次看到了 flow, 想着还是先去了解了解它内部几个操作符的原理吧,不然用起来总是不太踏实。

需要注意的是 Flow 需要在协程中使用, 分析 flow 工作流程离不开协程的工作原理,关于 Kotlin 协程的解析可以参考下列文章:

阅读全文 »