opoojkk

没有什么困难是不能打败我的!

Paging3核心解析:Kotlin Flow 如何实现内存与数据双高效

Paging 库是什么? # Paging 库的核心作用是帮助 Android 应用高效地加载和展示大数据集。 人话解释: 它就像一个聪明的服务员,不会一次性把所有菜都端上来(避免内存爆炸),而是根据你的需求(分页)逐步、按需从本地数据库或网络获取一小部分数据。这样能显著降低内存压力,提供流畅的用户体验。

深入 Compose:从 setContent 到 LayoutNode 绘制原理

在之前,我一直以为 Compose 是深不可测、难以理解的东西,直到我打开一个 Compose 项目的 setContent 方法,才发现它其实并没有那么复杂。 Compose 和 XML 的不同,只是写 UI 的方式不同而已。而关键差别,就在 setContent 方法上。注意,这里的 setContent 与我们平时在 Activity 中调用的、传入一个 View 或布局 id 的 setContentView 并不是同一个方法。它只是名字相同,实际上完全是另一套实现:

Jetpack DataStore:Android应用中的现代数据存储方法

在学习 DataStore 之前,需要先了解 Kotlin 属性委托 的概念。 Kotlin 属性委托简介 # Kotlin 支持通过 属性委托 (by) 来委托属性的获取和设置逻辑。 基本规则是:如果一个对象实现了如下方法: 1 operator fun getValue(thisRef: Any?, property: KProperty<*>): A 那么就可以用 by 实例 的方式将属性委托给该对象。 示例:

Protocol Buffers编码原理

Protocol Buffers(简称 proto)是一种高效的二进制序列化协议。它的核心编码方式基于 Base-128 Varint(128 进制变长整数)。理解它的编码规则是掌握 proto 的关键。 基于 Base-128 的 Varint 编码 # Varint 是一种可变长度整数的编码方式。一个整数可以用 1~10 个字节存储,数值越小,占用的字节越少。

重新理解Android事件分发机制

在 Android 中,应用程序存在一个主线程(Main Thread),也被称为UI 线程。所有与界面相关的操作(如刷新 UI、响应点击)都必须在这个线程上完成。其实不仅是 Android,像 JavaScript 这样的前端运行环境也采取了类似的单线程设计。

WorkManager是怎样工作的

在 Android 开发中,WorkManager 是官方推荐的后台任务管理框架。它的特点是 任务可靠执行,即便应用退出或设备重启,也能保证任务最终执行。本文尝试从源码和运行机制角度梳理 WorkManager 的执行逻辑。 一个最简单的例子 # 1 2 3 4 5 6 7 8 9 10 11 12 class UploadWorker(appContext: Context, workerParams: WorkerParameters) : Worker(appContext, workerParams) { override fun doWork(): Result { // 任务逻辑 return Result.success() } } val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>().build() WorkManager.getInstance(this).enqueue(uploadWorkRequest) UploadWorker:自定义任务。 enqueue():将任务加入队列。 WorkManager 是单例,内部依赖 Application 实例,并通过 Provider.Configuration 提供配置(线程池、协程上下文等)。 WorkManager 的关键点 # 基于队列思想:和常见任务队列类似,支持依赖、状态跟踪。 持久化任务信息:任务存储在数据库中,确保系统杀进程后还能恢复。 多种调度器实现:底层通过 JobScheduler、GCM 或 AlarmManager 触发执行。 任务入队:数据库层面 # 数据库核心表:WorkSpec

权力和权利

权力对应英文单词power,通过职位等方式获取到,能支配其他人,是有力量的。就比如警察差身份证。 权利对应right,法律、规定等规则授予的,在规则下能享受到的利益,像是选举权、被选举权、言论、出版、集会、结社、游行、示威、受教育(受教育总该有了吧)。

Android中的View加载是怎样执行的

在 Android 中,Activity 是四大组件之一,负责将 视图(View)与 生命周期 关联。当一个 Activity 创建时,通常会通过 setContentView 设置内容,其本质是将一个 View 添加到系统预留的容器中。 在这个过程中,xml 文件会被解析成一个树状结构的 View。本文主要介绍 xml 布局是如何转化为 View 的。

技术文章的价值思考

前几天我看到一个帖子,讨论的问题是:“在 AI 时代,技术文章还有必要吗?” 这是个有些“老派”的提法,但依然引起了不少人讨论。大多数人的观点是:没什么必要了。因为相比 AI 掌握的庞大知识,技术文章的那点内容微不足道。

Kotlin泛型和reified

Generics were introduced to the Java language to provide tighter type checks at compile time and to support generic programming. To implement generics, the Java compiler applies type erasure to: Replace all type parameters in generic types with their bounds or Object if the type parameters are unbounded. The produced bytecode, therefore, contains only ordinary classes, interfaces, and methods. Insert type casts if necessary to preserve type safety. Generate bridge methods to preserve polymorphism in extended generic types. Type erasure ensures that no new classes are created for parameterized types; consequently, generics incur no runtime overhead. Type Erasure (The Java™ Tutorials > Learning the Java Language > Generics (Updated))