归档

2026 年 08 月

用户最怕 App 耗电。后台偷偷跑、GPS 一直定位、网络频繁唤醒,都是电量杀手。电量优化的本质,是减少不必要的系统唤醒。 一、Doze 和 App Standby Android 6.0 引入的 Doze 模式: 屏幕关闭且设备静止一段时间后进入 Doze 期间网络、闹钟、Job 被推迟到窗口期集
网络请求是 App 耗电和流量的主要来源之一。同样的接口,优化前后可能差几倍。今天聊一些工程上立竿见影的做法。 一、连接复用:HTTP/2 和连接池 val client = OkHttpClient.Builder()     .protocols(listOf(Protocol.HTTP_2, 
包体积直接影响下载转化率和更新率。每多 1MB,都可能让一部分用户放弃下载。包体积优化不是一次性工作,是持续监控的过程。 一、APK / AAB 里都有什么 用 Android Studio 的 APK Analyzer 打开一个 APK,通常会看到: classes.dex:编译后的字节码 res
Navigation 组件出来好几年了,但很多项目还是手写 Fragment 管理。不是它不好用,而是多栈、跨模块、深层链接这些场景容易踩坑。 一、Navigation 解决了什么问题 Fragment 跳转代码散落在 Activity 里 返回栈管理容易出 Bug 深层链接和参数传递写起来乱 多
很多 Android 项目测试少,不是因为不想写,而是不知道测什么、怎么测。测试金字塔可以帮你决定投入比例。 一、测试金字塔三层       /\      /  \   UI 测试(少、慢、贵)     /____\    /      \  集成测试(中)   /________\  /    
项目越大,构建越慢,耦合越重。模块化的目的不是炫技,是为了让团队能并行开发、独立测试、快速构建。 一、模块化的三种粒度
Android 设备形态越来越杂:折叠屏、平板、挖孔屏、刘海屏、药丸屏。只做一套固定布局已经不够了,响应式 UI 是高级工程师的必修课。 一、WindowInsets:处理好系统栏 ViewCompat.setOnApplyWindowInsetsListener(root) { view, ins
Android 后台限制越来越严。Doze、App Standby、后台启动限制,让 AlarmManager 和 Service 不再是首选。复杂后台任务,现在基本交给 WorkManager。 一、WorkManager 能解决什么问题
本地数据库是 App 的标配。Room 让 SQLite 写起来像操作对象,但用久了会发现:同样的 Room,有人快有人慢,差别就在索引和查询设计。 一、为什么 Room 查询会慢 Room 本质还是 SQLite。慢通常不是 Room 的问题,是 SQL 的问题: 没建索引,全表扫描 一次性查太多
动画不是炫技,它是用户体验的一部分。按钮点击没反馈、页面跳转太生硬,用户会觉得 App“不跟手”。 Android 动画经历过几次演进:View 动画 → 属性动画 → MotionLayout。今天把核心路径串一遍。 一、属性动画 ValueAnimator + ObjectAnimator 属性