opoojkk

Be open to new experiences!

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))

flutter渲染和布局

原文:Flutter architectural overview | Flutter 本节描述了Flutter的渲染管道,即将一层层的Widgets层级转换为实际绘制在屏幕上的像素的系列步骤。 Flutter的渲染模型 # 你可能会好奇:如果Flutter是一个跨平台框架,它是如何实现和单平台框架接近的性能呢?

Fragment的故事

Fragment 在原生 Android 开发中一直占有一席之地。像 ViewPager2、Dialog 都依赖 Fragment 来实现。虽然在实现底部导航(Bottom Navigation)时,ViewPager2 配合 Fragment 有一些小坑,但这并不影响 Fragment 在 Android 体系中的地位。

举报和被举报的

最近遇到一件有意思的事。自疫情开始,我一直在听梁文道的音频节目《八分》,今年他推出了付费版本《八分半》,犹豫了一阵子后,我订阅了。 一直以来相安无事,直到最近节目被全平台下架。有人猜测,是因为在蔡澜去世的那一期节目里,道长(梁文道)谈到了香港,提到了《苹果日报》的老板。我觉得这种说法可信度很高,因为如今的“爱国”已经到了空前的高度。