第六天笔记
组件库笔记
1. 组件库依赖、发布和使用
依赖方式对比
2.x版本 | 3.x版本 | 说明 |
---|---|---|
apk | runtimeOnly | apk 功能同 runtimeOnly。只在生成 apk 时参与打包,编译时不会参与。Gradle 只会将依赖项添加到构建输出,以便在运行时使用。 |
provided | compileOnly | provided 功能同 compileOnly。只在编译时有效,不会参与打包至 apk。 |
compile | api | compile 功能同 api。该依赖方式会传递所依赖的库,当其他 module 依赖了该 module 时,可以使用该 module 下使用 api 依赖的库。 |
- | implementation | 该依赖方式所依赖的库不会传递,只会在当前 module 中生效。 |
格式介绍
格式 | 介绍 | 差异 |
---|---|---|
AAR | AAR 文件包含了 Android 库项目的代码、资源文件和清单文件等信息,可以被其他 Android 应用程序引用和使用。 | Android 特有的归档文件格式,主要用于打包 Android 库项目。 |
JAR | JAR 文件包含了 Java 类文件、资源文件和清单文件等信息,可以被其他 Java 应用程序引用和使用。 | Java 中常用的归档文件格式,用于打包 Java 类库和应用程序。 |
依赖添加方式
-
本地依赖
将 Jar 文件放置在项目的
libs
目录下,并在项目的build.gradle
文件中添加以下依赖:dependencies { implementation files('libs/library_name.jar') }
其中,
library_name.jar
是 Jar 文件的名称。 -
仓库依赖
Jar 文件发布到 Maven 仓库或 JCenter 等公共仓库中,并在项目的
build.gradle
文件中添加以下依赖:dependencies { implementation 'group_id:artifact_id:version' }
其中,
group_id
是 Jar 文件所属的组织或公司的 ID,artifact_id
是 Jar 文件的名称,version
是 Jar 文件的版本号。- Maven 仓库地址:
https://repo.maven.apache.org/maven2/
- JCenter 仓库:
https://jcenter.bintray.com/
- Maven 仓库地址:
3. 自定义仓库
a. 配置
mavenDeployer {
// 本地 maven 仓库的路径
repository(url: uri("$rootDir/maven"))
// 生成 maven 依赖的组名
pom.groupId = 'com.xiaomi.lib'
// 生成 maven 依赖的模块名称
pom.artifactId = 'image'
// 生成 maven 依赖的版本号
pom.version = '1.0.0'
}
b. 发布
-
在 Android Studio 中 Gradle 面板工程的根目录找到功能菜单:
CircleImageLib
->Task
->upload
->uploadArchives
-
双击
uploadArchives
开始打包发布或在 Terminal 命令行中执行:./gradlew uploadArchives
c. 引用
-
在工程根目录的中的
repositories
中添加仓库地址:
maven { url uri("$rootDir/maven") }
-
在 App Module 目录的
build.gradle
中添加依赖。
2. 基础组件库
2.1 图片库
- 图片库 Glide 组件源码地址: https://github.com/bumptech/glide
- Glide Transformations 源码地址: https://github.com/wasabeef/glide-transformations
- Glide 图片原理
- 更多组件
Glide
图片加载缓存机制
2.2 事件传递库
a. EventBus 集成使用
-
依赖集成:
implementation("org.greenrobot:eventbus:3.3.1")
b. EventBus原理
2.3 适配器组件库
a. BaseRecyclerViewAdapterHelper使用
-
项目地址: https://github.com/CymChad/BaseRecyclerViewAdapterHelper
-
依赖集成:
implementation "io.github.cymchad:BaseRecyclerViewAdapterHelper:2.9.50"
-
项目根目录的中添加:
maven { url "https://jitpack.io" }
-
b. BaseRecyclerViewAdapterHelper基本原理
2.4 刷新库
SwipeRefreshLayout
组件使用- PullToRefresh组件原理解析
2.5 更多组件库
UI组件 | 描述 | UI组件 | 描述 |
---|---|---|---|
SmartRefreshLayout |
支持下拉刷新、上拉加载 | BaseRecyclerViewAdapterHelper |
灵活的RecyclerAdapter |
TwinklingRefreshLayout | 支持下拉刷新和上拉加载 | Android-PickerView |
选择器 |
SwipeBackLayout |
支持手滑滑动返回 | TitleBar |
标题栏框架 |
CoordinatorTabLayout |
配合TabLayout 折叠控件 |
ToastUtils | 各种聚集杂项 |
FlowLayout Android |
Android流式布局 | Toasty | 自定义Toast库 |
ShimmerRecyclerView |
数据加载闪烁效果 | banner | 轮播图 |
动画
动画库 | 描述 |
---|---|
lottie |
json动画库 |
AVLoadingIndicatorView |
load动画库 |
数据库
数据库库 | 描述 |
---|---|
greendao | 将对象映射的SQLite的ORM解决方案库 |
litepal | 对象关系映射 (ORM) 模型 |
afinal | 开源的android的Orm和Ioc应用开发框架,小巧灵活,代码优雅 |
objectbox | 基于IoT为嵌入和移动设备打造出的非常快速的面向对象的数据库库 |
Room | Google推出的官方数据库框架 |
realm | 移动端数据库,替代SQLite & ORMs |
事件传递
事件传递库 | 描述 |
---|---|
eventbus | 在activities, fragments, threads, services之间传递消息 |
rxbus | 简易的非反射的事件总线库 |
网络请求
网络请求库 | 描述 |
---|---|
okhttp | 安卓端最火热的网络请求库,使用简单,功能完备 |
volley | 网络请求库,适合数据量不大,通信频繁的网络操作 |
retrofit | 基于okhttp封装的网络库 |
JSON解析
JSON解析库 | 描述 |
---|---|
fastjson | Java语言编写的高性能功能完善的JSON库 |
gson | Java序列化反序列化库用于JSON和Java对象转化 |
moshi | 面向Android, Java 和Kotlin的现代JSON库 |
Jackson | Java JSON库 |
热修复
热修复库 | 描述 |
---|---|
tinker | 腾讯热修复解决方案库 |
robust | 美团热修复框架 |
注解框架
注解框架库 | 描述 |
---|---|
butterknife | View, Resource注入框架 |
dagger | 依赖注入库 |
性能优化
性能优化库 | 描述 |
---|---|
leakcanary | 内存泄漏检测库 |
blockcanary | 卡顿检测 |
arca | 应用崩溃报告 |
组件化
组件化库 | 描述 |
---|---|
arouter | App进行组件化改造的路由框架 |
响应式
响应式库 | 描述 |
---|---|
rxjava | 响应式编程,创建基于事件的异步操作库 |
rxandroid | RxJava的Android绑定 |
动画
-
问: Lottie 动画库的优点是什么?它是如何工作的?
- 答: Lottie 是一个强大的动画库,支持在 Android、iOS 和 Web 上渲染 Adobe After Effects 动画。它的主要优点包括:
- 跨平台支持: 一次创建,随处使用。
- 高性能: 通过 JSON 文件渲染动画,比传统帧动画更高效。
- 易于使用: 只需几行代码即可加载并播放动画。 Lottie 工作原理是通过解析由 Bodymovin 导出的 JSON 文件,并将其转换为原生的动画效果。
- 答: Lottie 是一个强大的动画库,支持在 Android、iOS 和 Web 上渲染 Adobe After Effects 动画。它的主要优点包括:
-
问: 如何在 Android 项目中集成 AVLoadingIndicatorView?
-
答: 在 Android 项目中集成 AVLoadingIndicatorView 可以按照以下步骤进行:
-
在项目的
文件中添加依赖:
implementation 'com.wang.avi:library:2.1.3'
-
在布局文件中添加 AVLoadingIndicatorView:
<com.wang.avi.AVLoadingIndicatorView android:id="@+id/avi" android:layout_width="wrap_content" android:layout_height="wrap_content" app:indicatorName="BallPulseIndicator"/>
-
在代码中启动或停止动画:
AVLoadingIndicatorView avi = findViewById(R.id.avi); avi.show(); // To start animation avi.hide(); // To stop animation
-
-
数据库
- 问: Room 数据库有哪些主要特性?
- 答: Room 是 Google 推出的官方数据库库,主要特性包括:
- 简单易用: 使用注解来定义数据库表和查询。
- 编译时验证: Room 在编译时验证 SQL 查询语句的正确性。
- 与 LiveData 和 RxJava 集成: 支持与 LiveData 和 RxJava 集成,实现数据的异步处理和响应式编程。
- 迁移支持: 提供了方便的数据库迁移机制。
- 答: Room 是 Google 推出的官方数据库库,主要特性包括:
- 问: 对比 SQLite、Realm 和 ObjectBox,有哪些不同点?
- 答:
- SQLite: 原生支持,轻量级,广泛应用,但需要手动管理数据库和查询。
- Realm: 高性能,简单易用,支持实时更新,但库体积较大,使用时需要注意许可证问题。
- ObjectBox: 高性能,简易的对象关系映射,适用于物联网和移动设备,但相对较新,社区支持可能不如前两者。
- 答:
事件传递
- 问: EventBus 和 RxBus 有什么区别?
- 答:
- EventBus: 简单易用,基于发布-订阅模式,适用于组件间的简单通信。
- RxBus: 基于 RxJava 实现的事件总线,支持复杂的事件流处理和异步操作,适合需要响应式编程的场景。
- 答:
网络请求
- 问: Retrofit 是如何简化网络请求的?
- 答: Retrofit 是一个基于 OkHttp 的网络请求库,通过注解和接口定义 API,简化了网络请求的处理。主要优点包括:
- 类型安全: 自动将 JSON 响应解析为指定的 Java 对象。
- 简洁的 API 定义: 通过注解定义请求方法和参数。
- 与 OkHttp 集成: 支持 OkHttp 的所有特性,如拦截器和缓存。
- 扩展性强: 支持自定义转换器和适配器,如 Gson、Moshi 和 RxJava。
- 答: Retrofit 是一个基于 OkHttp 的网络请求库,通过注解和接口定义 API,简化了网络请求的处理。主要优点包括:
JSON解析
- 问: Gson 和 Moshi 有什么区别?
- 答:
- Gson: 由 Google 开发,稳定且广泛使用,支持复杂的数据结构和自定义序列化/反序列化。
- Moshi: 由 Square 开发,现代化设计,支持 Kotlin 特性(如 Kotlin 类型和不可变数据类),性能更高,错误处理更友好。
- 答:
性能优化
- 问: LeakCanary 是如何帮助检测内存泄漏的?
- 答: LeakCanary 是一个内存泄漏检测库,通过监控对象的生命周期来检测内存泄漏。当检测到内存泄漏时,会生成详细的泄漏路径报告,帮助开发者快速定位和修复内存泄漏问题。
响应式
-
问: RxJava 的核心思想是什么?如何在 Android 中使用 RxJava?
-
答: RxJava 的核心思想是响应式编程,通过 Observable 和 Observer 进行事件流处理。它允许开发者以声明性方式处理异步事件和数据流。使用 RxJava 可以简化异步操作,避免回调地狱。在 Android 中使用 RxJava,可以通过以下步骤:
-
添加依赖:
implementation 'io.reactivex.rxjava3:rxjava:3.0.0' implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
-
创建 Observable 和 Observer:
Observable<String> observable = Observable.just("Hello, RxJava"); Observer<String> observer = new Observer<String>() { @Override public void onSubscribe(Disposable d) {} @Override public void onNext(String s) { Log.d("RxJava", s); } @Override public void onError(Throwable e) {} @Override public void onComplete() {} }; observable.subscribe(observer);
-
-
v

对方正在输入… 2024/7/11 14:43:38
implementation 'io.github.cymchad:BaseRecyclerViewAdapterHelper:3.0.14'
对方正在输入… 2024/7/11 15:52:47
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")
对方正在输入… 2024/7/11 16:55:18
BaseMultiItemQuickAdapter
对方正在输入… 2024/7/11 16:55:33
SwipeRefreshLayout
对方正在输入… 2024/7/11 16:56:01
EventBus.getDefault().post
对方正在输入… 2024/7/11 16:56:14
Glide.with