opoojkk

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

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 体系中的地位。

举报和被举报的

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

AI入门指南:从零开始理解人工智能

人工智能(英语:artificial intelligence,缩写为AI(英语文本)),指由人造机器所展现的智能。通常人工智能是指用普通计算机程序来呈现人类智能的技术。该词也指出研究这样的智能系统是否能够实现,以及如何实现。

LeakCanary检测到内存泄漏之后发生了什么

检测 # LeakCanary 是 Android 开发中最常用的内存泄漏检测工具之一。由于在 dump 内存快照时需要 挂起所有线程,这会带来明显的卡顿,因此它通常只在开发和调试阶段启用。 涉及到的类型有弱引用、引用队列和一个map。像是这样: 1 private val watchedObjects: MutableMap<String, KeyedWeakReference> = ConcurrentHashMap() 弱引用不会影响对象是否被回收,当弱引用被清理之后,弱引用会被添加进关联的弱引用队列。Leak Canary用到的弱引用类型KeyedWeakReference是WeakReference的一个子类,增加了key。弱引用的key也是watchedObjects的key,于是对象、弱引用、map几个关键信息就联系起来。