Jetpack是Google推出的一套Android开发组件库,旨在帮助开发者遵循最佳实践、减少样板代码,并编写可在各种Android版本和设备上一致运行的代码。
Jetpack组件分类
1. 架构组件(Architecture Components)
ViewModel
kotlinclass MyViewModel : ViewModel() { private val _data = MutableLiveData<String>() val data: LiveData<String> = _data fun loadData() { // 配置变更时数据不会丢失 _data.value = "Loaded" } }
- 作用:管理UI相关的数据,生命周期感知
- 特点:配置变更(如旋转屏幕)时数据保留
LiveData
kotlinviewModel.data.observe(this) { value -> // 自动处理生命周期,避免内存泄漏 textView.text = value }
- 作用:可观察的数据持有者,生命周期感知
- 特点:自动清理,避免内存泄漏
Room
kotlin@Entity data class User(@PrimaryKey val id: Int, val name: String) @Dao interface UserDao { @Query("SELECT * FROM user") fun getAll(): LiveData<List<User>> @Insert fun insert(user: User) }
- 作用:SQLite的抽象层,简化数据库操作
- 特点:编译时SQL检查,支持LiveData返回
DataBinding
xml<TextView android:text="@{viewModel.userName}" />
- 作用:将布局中的UI组件与数据源绑定
- 特点:减少findViewById,自动更新UI
Navigation
kotlin// 管理Fragment跳转和返回栈 findNavController().navigate(R.id.action_detail)
- 作用:管理应用内导航
- 特点:可视化导航图,支持Deep Link
WorkManager
kotlinval workRequest = OneTimeWorkRequestBuilder<MyWorker>().build() WorkManager.getInstance(context).enqueue(workRequest)
- 作用:管理可延迟的后台任务
- 特点:保证任务执行,支持约束条件
2. UI组件
Fragment
- 作用:模块化的UI组件
- 特点:与Activity解耦,复用性强
RecyclerView
- 作用:高效显示大量数据列表
- 特点:ViewHolder模式,四级缓存
ViewPager2
- 作用:页面滑动切换
- 特点:基于RecyclerView,支持垂直滑动
3. 基础组件
AppCompat
- 作用:向后兼容支持
- 特点:使用新特性同时兼容旧版本
Android KTX
kotlin// Kotlin扩展函数 sharedPreferences.edit { putString("key", "value") }
- 作用:Kotlin友好的API扩展
- 特点:简化代码,更符合Kotlin习惯
Multidex
- 作用:突破65536方法数限制
- 特点:自动分包处理
4. 行为组件
DownloadManager
- 作用:管理长时间下载任务
- 特点:系统级服务,断点续传
Media & Media3
- 作用:音频视频播放
- 特点:统一的媒体播放API
Notifications
- 作用:创建和管理通知
- 特点:兼容各版本通知特性
Permissions
kotlin// 简化权限请求 requestPermissionLauncher.launch(Manifest.permission.CAMERA)
- 作用:简化运行时权限处理
Jetpack优势
| 优势 | 说明 |
|---|---|
| 向后兼容 | 组件支持Android 5.0+ |
| 生命周期感知 | 自动管理生命周期,避免内存泄漏 |
| 减少样板代码 | 简化常见开发任务 |
| 一致性 | 统一的API设计 |
| 测试友好 | 组件可独立测试 |
MVVM架构实践
shellView (Activity/Fragment) ↓ 观察 ViewModel ↓ 调用 Repository ↓ 获取数据 Data Source (Room/Network)
面试要点
- 理解ViewModel的生命周期范围
- 掌握LiveData的转换操作(map、switchMap)
- 了解Room的数据库迁移
- 理解DataBinding的双向绑定
- 掌握Navigation的Deep Link使用