四、 核心设计模式:State Holder (状态持有者) 在 SmartPDF 中,我放弃了传统的“在 Fragment/Screen 中定义大量变量”的做法,转而使用 ...
四、 核心设计模式:State Holder (状态持有者) 在 SmartPDF 中,我放弃了传统的“在 Fragment/Screen 中定义大量变量”的做法,转而使用 ...
在开发 SmartPDF 时,我们面临的核心挑战是如何在 Jetpack Compose 的声明式 UI 框架中,优雅地管理复杂的 PDF 阅读交互(如页码同步、夜间模式切换...
Lifecycle 的引入确实已经很多年了(最早可以追溯到 2017 年的 Google I/O)。观察这几年的实际影响,它并不仅仅是多了一个 API,而是彻底重塑了 And...
在 Senior 工程师的工具箱里,repeatOnLifecycle 是目前处理异步数据流(Flow)的黄金准则。 很多开发者会觉得:既然有了 collectAsState...
这是一个非常核心的问题,触及了 Kotlin 设计的精髓:“顶层是 Kotlin,底层是 JVM(Java 虚拟机)”。 简单直接的回答是:是的,绝大部分情况下,Androi...
这是一个非常具有工程实践意义的问题。作为一名有经验的开发者,你应该考虑的不仅是“能运行”,而是代码的复用性、可测试性和 UI 层的清爽度。 建议根据你的项目架构选择以下方案之...
lifecycle相关的几个核心机制: 1. 生命周期的“状态”与“事件” (State vs. Event) 很多开发者会混淆这两个概念,但在代码逻辑中,它们的区别至关重要...
当 ComponentActivity(以及 Fragment)选择实现 LifecycleOwner 接口并暴露 lifecycle 对象时,Google 官方实际上是在向...
针对这一段代码,如果要在视频或技术分享中描述背景,需要用一些“专业痛点词汇”来瞬间抓住 Senior 听众的耳朵。 以下是关键词,分为表象问题、架构缺陷和工程风险三个维度: ...
如果把 Android 技术专家的成长比作大学的“必修课”,想要拿到 A 等级,仅仅会写业务代码(增删改查)是远远不够的。你需要从底层原理、架构思维到工程能力实现全方位的突破...
继续 ViewModel 与 Activity 的解耦 ,我们直接把这个案例推向 Senior 级别的终极形态:结合 LifecycleObserver 实现自动化、无侵入的...
在很多初中级开发者的代码中,经常能看到这种写法,但这正是“代码坏味道”的根源。 作为 Senior 开发者,我们要从“所有权(Ownership)”和“生命周期(Lifecy...
WorkManager 是“包工头”,那我们作为 Senior 开发者,必须拆开这个“包工头”的黑盒子,看看它到底是怎么在 App 进程已经彻底死掉 的情况下,还能被系统像“...
能用 WorkManager 就不直接用 Service 这句话是 Android 现代开发的“金科玉律”,也是 Senior 面试中考察系统资源调度(Resource Sc...
币币交易模块重写(作者张辉) 现有问题 布局文件层级结构复杂。 多次迭代导致出现大量冗余代码。 关键模块代码不严谨,部分逻辑混乱。 缺少注释,不便于后面维护。 优化目标 布局...
下面是事件分发机制的一些结论 ViewGroup默认不拦截任何事件。Android源码中ViewGroup的onInterceptTouchEvent方法默认返回false。...
先看示例代码 两个自定义控件,重写了相关方法,便于考察事件分发 点击一下界面中的文本,日志打印如下 可见,事件传递过程是由外向内,即事件总是先传递给父元素,然后由父元素分发给...
一个简单问题:点击Activity中的一个TextView,触摸事件是怎样分发传递的 View的事件传递由三个重要方法完成,dispatchTouchEvent(), onI...
当前组件销毁时,后台线程同样需要中止,否则仍会在内存中运行,这就造成内存泄漏。 线程对象属于一次性消耗品,一般线程执行完run方法之后,线程就正常结束了,线程结束之后就报废了...
AsyncTask是并行执行的吗?一般都会觉得当然是并行执行,但其实不是。 在Android 1.5刚引入的时候,AsyncTask的execute是串行执行的;到了Andr...