摘要:一、postValue vs value 的核心区别 ✅ _data.value = xxx 只能在主线程(UI线程)调用 同步执行(立即通知观察者) ✅ _data.postValue(xxx) 可以在任意线程调用(包括子线程) 异步执行(内部切到主线程再分发) 多次调用可能合并,只发最后一次 �
阅读全文
摘要:🧠 一、核心结论(先给你抓重点) 👉 点击事件是“立即执行”的,但生命周期是“异步推进”的 当你连续点击时: 第一次点击 → 触发页面切换 → 生命周期开始变化 第二次点击 → 仍然被执行(但此时页面已经“不安全”) 💥 于是:在错误的生命周期状态执行 UI 操作 → 出现白屏 / 崩溃 /
阅读全文
摘要:一、dropUnlessResumed 是干嘛的? 在 Jetpack Compose 里(Navigation 或 lifecycle 相关扩展),dropUnlessResumed 的作用是: 👉 只有当当前界面处于 RESUMED 状态时才执行点击逻辑,否则直接丢弃 可以理解为: if (l
阅读全文
摘要:为什么会闪退 看到闪退并没有报错窗口,是因为: JCEF runtime 使用的 Chromium 与 IDE 版本 ABI 不匹配; Android Studio 在加载 WebView 框架时崩溃(通常在 /Contents/lib/jcef_app.jar 处失败); Apple Silico
阅读全文
摘要:第一部分:专项清理 - 彻底清理 Gradle 缓存和残留 这是解决问题的核心。Gradle 将所有下载的依赖包、编译产物等都存储在它的缓存目录中。 步骤 1: 找到并清理 Gradle 缓存目录 Gradle 缓存默认位于用户主目录下的 .gradle 文件夹中。这里存放着所有版本的依赖库。 打开
阅读全文
摘要:Big Endian or Little Endian 是用来描述计算机以哪种顺序存储数据,同时在网络传输中也有应用。 在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送
阅读全文
摘要:一、理解设计模式 控制反转 是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。 实现控制反转最常见的方式叫做依赖注入(Dependency Injection,简称DI),依赖注入(Dependency Injection)和控制反转(Inversion of Control)基本
阅读全文
摘要:1, 首选:object 单例(Kotlin 特性) object 是 Kotlin 提供的单例模式实现,天然支持全局访问和状态更新。 object AppState { var currentUser: String = "" var isLoggedIn: Boolean = false fun
阅读全文
摘要:大家好,写给初学者的Jetpack Compose教程又更新了。 虽然我的进度很慢,但这个系列的教程还没有停更。 书接上篇的Compose文章,写给初学者的Jetpack Compose教程,Lazy Layout。 在这篇文章中,我很细致地讲解了Lazy Layout的用法,但同时也埋下了一个坑,
阅读全文
摘要:大家好,写给初学者的Jetpack Compose教程又来了。 经过前面4篇文章的学习,相信大家都已经成功入门了Compose编程。不仅了解了Compose的核心编程理念(声明式UI),而且已经可以使用Compose编写一些简单的小程序了。 今天我们要学习的是Compose中必学的一个控件,Lazy
阅读全文
摘要:今天我们要介绍的是Compose当中至关重要的一个组件,State。 State不光非常的重要,同时可以让我们的Compose学习之旅变得更加有趣。为什么这么说呢?因为在之前的学习过程当中,我们所实现的都是静止的界面效果,而有了State之后,则可以让界面开始动起来了。 因为这个系列教程采用的循序渐
阅读全文
摘要:大家好,写给初学者的Jetpack Compose教程又更新了。 在本系列上一篇文章 写给初学者的Jetpack Compose教程,derivedStateOf 的留言中,有位读者朋友说,想要让我写一篇关于IntrinsicSize的文章,官方文档看得似懂非懂。 我的这个Compose系列本来就没
阅读全文
摘要:大家好,写给初学者的Jetpack Compose教程又更新了。 上一篇文章中,我们学习了Compose的基础控件和布局,还没有看过上一篇文章的,请参考 写给初学者的Jetpack Compose教程,基础控件和布局 。 其实在上一篇文章中,有个知识点一直在反复出现,但是我却一直没有讲解,那就是Mo
阅读全文
摘要:大家好,写给初学者的Jetpack Compose教程又更新了。 准确来说,这才是本系列的第一篇文章。因为上篇文章只是个序篇,和大家聊一聊为什么我们要学习Compose。如果你现在仍然有这个疑惑,那么可以先移步上篇文章 写给初学者的Jetpack Compose教程,为什么要学习Compose? C
阅读全文
摘要:清空 ByteArray 数组的代码 在 Kotlin 中,可以通过以下方式清空一个 ByteArray: 将所有元素设置为 0: val byteArray = ByteArray(10) { it.toByte() } // 初始化一个ByteArray byteArray.fill(0) //
阅读全文
摘要:在 Kotlin 中,可以通过字节数组和 32 位整数(Int)数组之间的转换方法,完成数据类型的双向映射。以下是实现步骤和相关的所有数据类型转换方法。 将 32 位整数数组转换为字节数组 32 位整数(Int)占用 4 个字节,因此将 IntArray 转换为 ByteArray 时,需要对每个整
阅读全文
摘要:这篇文章是关于Android开发中广播机制的介绍。在Android中,每个应用程序都可以注册自己感兴趣的广播,这些广播可能来自系统,也可能来自其他应用程序。Android提供了一套完整的API,允许应用程序自由地发送和接收广播。文章主要介绍了两种类型的广播:标准广播和有序广播。标准广播是一种完全异步
阅读全文
摘要:import java.security.KeyPairGenerator import java.security.interfaces.ECPublicKey import java.security.spec.ECGenParameterSpecfun createPublicKey() {
阅读全文
摘要:在 Kotlin 中,ByteArray 是一种表示字节数据的数组类型,ByteArray 提供了丰富的功能来进行字节数组的操作。以下是对 ByteArray 操作的常见方法,涵盖了你提到的添加、删除、插入、截取等多种常见操作。 1. 添加元素 Kotlin 没有提供直接在 ByteArray 上添
阅读全文
摘要:你遇到的错误与 Flutter 项目中的 Gradle 配置和 Android 12 的新要求相关。下面是逐步解决这些问题的方案: 1. 解决 android:exported 问题 Android 12 及更高版本要求在 AndroidManifest.xml 中的每个有 intent-filte
阅读全文