Android进阶
架构模式
MVVM
- Model:数据与业务逻辑;View:界面;ViewModel:暴露状态与命令,不持有 View 引用。
- 数据驱动:ViewModel 通过 LiveData/StateFlow 暴露 UI 状态,View 观察并更新。
- 生命周期安全:LiveData/StateFlow 与 Lifecycle 绑定,避免内存泄漏。
Repository 模式
- 统一数据入口:本地(Room、DataStore)与远程(Retrofit)在 Repository 中聚合。
- 可做缓存策略:先内存/本地,再网络;可暴露 Flow 实现响应式。
依赖注入(Hilt)
- 构造注入、单例与作用域、模块与组件;便于测试与解耦。
- @Inject、@Module、@Provides、@AndroidEntryPoint、@HiltViewModel。
Kotlin 协程
- 挂起函数:suspend;CoroutineScope(lifecycleScope、viewModelScope);launch、async;withContext 切换调度器(Dispatchers.Main/IO/Default)。
- 取消与异常:Job.cancel、CoroutineExceptionHandler;取消会传播,需在耗时处检查 isActive 或 yield。
- Flow:冷流、collect、map、filter、flatMapConcat、stateIn/shareIn;用于替代 LiveData 做更复杂流式数据。
Jetpack 组件
- ViewModel:配置变更存活、与 Activity/Fragment 生命周期关联。
- LiveData:可观察、生命周期感知、主线程分发;observe、observeAsState(Compose)。
- Room:DAO、Entity、Database;TypeConverter、Migration;配合 Flow 返回 Flow<List>。
- WorkManager:延迟/周期/约束任务;OneTimeWorkRequest、PeriodicWorkRequest;链式与唯一工作。
- Navigation:NavHost、NavController、SafeArgs;单 Activity 多 Fragment 或 Compose 路由。
- DataStore:替代 SharedPreferences;Preferences DataStore、Proto DataStore。
网络与序列化
- Retrofit:接口定义、@GET/@POST、@Body/@Query/@Path;Call 或 suspend 函数;Converter(Gson/Moshi)。
- OkHttp:Interceptor(日志、鉴权、重试);Cookie、缓存;可单独使用或作为 Retrofit 底层。
- 序列化:Gson、Moshi、kotlinx.serialization;注意 ProGuard 规则。
性能与优化
- 列表:RecyclerView + ViewHolder、DiffUtil、预取;避免在 onBindViewHolder 做重逻辑。
- 图片:Glide/Coil 加载、占位与错误图、缓存、缩略图与采样;大图或长列表注意内存。
- 启动:Application 与首屏精简、懒加载、异步初始化、Baseline Profile;避免主线程阻塞。
- 内存:LeakCanary 检测;避免非静态内部类持有多余引用、及时取消协程与监听。
- 包体积:minify、shrinkResources、ABI 过滤、资源与 so 优化。
安全与存储
- 敏感数据:EncryptedSharedPreferences、Keystore;密钥不硬编码。
- 组件导出:不需要的 Activity/Service 等设 android:exported="false";深链与 intent-filter 需校验数据。
- 网络安全:HTTPS、证书锁定(谨慎)、不要忽略证书错误。
测试
- 单元测试:JUnit4/5、Mockito/MockK;ViewModel、Repository、UseCase 的纯逻辑。
- UI 测试:Espresso;Idling Resource 处理异步;必要时用 Barista 等封装。
- 测试架构:清晰分层便于 mock;依赖注入便于替换实现。
最佳实践小结
- 使用 Kotlin、协程、Flow、ViewModel、Repository、Hilt。
- 统一错误处理与加载/空状态;网络与缓存策略明确。
- 遵循 Material Design 与无障碍;适配深色主题与多分辨率。
- 日志与埋点规范;ProGuard 与混淆规则完整;版本与依赖管理清晰。