大象笔记

withContext(Dispatchers.IO) 与 viewModelScope.launch(Dispatchers.IO) 的区别

## CoroutineScope withContext lifecycleScope viewModelScope 该如何选择 `CoroutineScope`, `withContext`, `lifecycleScope`, 和

Android Kotlin 协程 Dispatchers 有哪些值

根据具体的场景和需求选择合适的调度器非常重要,这样可以更好地平衡应用的性能和用户体验。 ## Dispatchers 有哪些值 - Dispatchers.Main:Android 主线程。用于调用 suspend 函数,UI 框架

Android Kotlin Room: AppDatabase_Impl does not exist

Android 4.1.2 测试 Android Room 的使用,在 coroutine 中调用 Room.databaseBuilder 时,报错 > AppDatabase_Impl does not exist Goo

Android ViewModel 与 LiveData 的使用场景

## 概述 - 在 activity 中监听 ViewModel 中数据的变化,当有变化时,将对应的数据显示在界面组件上 - LiveData 在 ViewModel 中使用,上面监听的数据类型就是 LiveData 类型。 - 同时

kotlin 的 suspend fun 函数

在看 Android Room 的示例代码时,看到一些 DAO 中的操作函数前有 suspend 关键字。例如: ``` @Query("DELETE FROM word_table") suspend fun deleteAll

使用视图绑定 View Binding 替代 findViewById

使用场景,例如,点击按钮获取输入框的内容。就需要写一堆 findViewById 的代码。 Android Studio 3.6 之后,可以使用 View Binding 来简化这个操作。 而且在绝大部分场景下,view bin

tampermonkey onclick 无效,显示 xxx is not defined

使用 tampermonkey 在当前网页中添加了一个按钮,用于手动触发自动化逻辑。 ``` 开始抢购 ``` do_something 函数,是我在 tampermonkey 脚本中定义的函数。 但是,点击按钮之后,

Android 点击 FAB 按钮打开另一个 fragment

使用 Android Studio 的 Basic Activity 模板创建了新项目。 Basic Activity 内置了: - 一个底部 FAB 按钮 - 两个 fragment 可以相互切换 但是,我想实现的交互

tampermonkey 上传 Blob 文件到其他服务器,multipart/form-data 版

application/octet-stream 版本的缺陷: - 无法增加多余参数。例如,我想顺便传递用户名,就没法增加字段了 - 搜了半天没找到 Spring Boot 读取 application/octet-stream 的

tampermonkey 上传 Blob 文件到其他服务器,application/octet-stream 版

例如,我想将 https://www.sunzhongwei.com 网页中下载到的 Excel 文件,上传到其他服务器。这里以 http://localhost:5000 为本地测试环境。 ## tampermonkey 中是否