android jetpack 有哪些常用的组件

1. 基础组件 (Foundation)

1.1 AppCompat

  • 作用:提供向后兼容的 Material Design 界面支持

  • 典型使用:

    kotlin 复制代码
    // 使用 AppCompatActivity 替代常规 Activity
    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
        }
    }

1.2 Android KTX

  • 作用 :为 Android 框架提供 Kotlin 扩展函数

  • 示例:

    kotlin 复制代码
    // 简化 SharedPreferences 操作
    val sharedPref = getSharedPreferences("my_prefs", Context.MODE_PRIVATE)
    sharedPref.edit { 
        putString("key", "value")
    }

2. 架构组件 (Architecture)

2.1 ViewModel

  • 作用:管理界面相关数据,处理配置变更

  • 典型使用:

    kotlin 复制代码
    class MyViewModel : ViewModel() {
        val liveData = MutableLiveData<String>()
        
        fun fetchData() {
            liveData.value = "New Data"
        }
    }
    
    // Activity/Fragment 中
    private val viewModel by viewModels<MyViewModel>()

2.2 LiveData

  • 作用:可观察的数据持有者,感知生命周期

  • 示例:

    kotlin 复制代码
    viewModel.liveData.observe(this) { data ->
        textView.text = data
    }

2.3 Room

  • 作用:SQLite 数据库抽象层

  • 典型实现:

    kotlin 复制代码
    @Entity
    data class User(
        @PrimaryKey val uid: Int,
        @ColumnInfo val name: String
    )
    
    @Dao
    interface UserDao {
        @Query("SELECT * FROM user")
        fun getAll(): LiveData<List<User>>
        
        @Insert
        fun insertAll(vararg users: User)
    }
    
    @Database(entities = [User::class], version = 1)
    abstract class AppDatabase : RoomDatabase() {
        abstract fun userDao(): UserDao
    }

2.4 WorkManager

  • 作用:管理后台任务

  • 示例:

    kotlin 复制代码
    class MyWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
        override fun doWork(): Result {
            // 执行后台任务
            return Result.success()
        }
    }
    
    // 安排工作
    val workRequest = OneTimeWorkRequestBuilder<MyWorker>().build()
    WorkManager.getInstance(context).enqueue(workRequest)

3. 行为组件 (Behavior)

  • 作用:简化应用内导航

  • 典型使用:

    xml 复制代码
    <!-- nav_graph.xml -->
    <navigation>
        <fragment
            android:id="@+id/firstFragment"
            android:name="com.example.FirstFragment"
            android:label="First">
            <action
                android:id="@+id/action_to_second"
                app:destination="@id/secondFragment" />
        </fragment>
        <fragment android:id="@+id/secondFragment" ... />
    </navigation>
    kotlin 复制代码
    // 导航操作
    findNavController().navigate(R.id.action_to_second)

3.2 Paging

  • 作用:分页加载数据

  • 典型实现:

    kotlin 复制代码
    class MyPagingSource : PagingSource<Int, Item>() {
        override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Item> {
            val page = params.key ?: 1
            val items = repository.getItems(page)
            return LoadResult.Page(
                data = items,
                prevKey = if (page == 1) null else page - 1,
                nextKey = page + 1
            )
        }
    }

4. UI 组件

4.1 Compose

  • 作用:声明式 UI 工具包

  • 简单示例:

    kotlin 复制代码
    @Composable
    fun Greeting(name: String) {
        Text(text = "Hello $name!")
    }

4.2 Data Binding

  • 作用:将 UI 组件绑定到数据源

  • 示例:

    xml 复制代码
    <layout>
        <data>
            <variable name="user" type="com.example.User"/>
        </data>
        <TextView
            android:text="@{user.name}"
            ... />
    </layout>

5. 其他重要组件

5.1 Hilt

  • 作用:依赖注入库

  • 典型使用:

    kotlin 复制代码
    @HiltAndroidApp
    class MyApplication : Application()
    
    @AndroidEntryPoint
    class MainActivity : AppCompatActivity() {
        @Inject lateinit var analytics: AnalyticsAdapter
    }

5.2 CameraX

  • 作用:简化相机开发

  • 基本实现:

    kotlin 复制代码
    val preview = Preview.Builder().build()
    val imageCapture = ImageCapture.Builder().build()
    
    CameraSelector.Builder()
        .requireLensFacing(CameraSelector.LENS_FACING_BACK)
        .build().also { selector ->
            CameraX.bindToLifecycle(this, selector, preview, imageCapture)
        }

Jetpack 组件选择建议

  1. 数据持久化:Room + Paging
  2. UI 开发:Compose + ViewModel + LiveData
  3. 后台任务:WorkManager
  4. 导航:Navigation 组件
  5. 依赖管理:Hilt
  6. 相机功能:CameraX

最新版本依赖示例 (2024年)

gradle 复制代码
// build.gradle 常用依赖
dependencies {
    // ViewModel
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2"
    
    // LiveData
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.2"
    
    // Room
    implementation "androidx.room:room-runtime:2.6.0"
    kapt "androidx.room:room-compiler:2.6.0"
    
    // Compose
    implementation "androidx.compose.ui:ui:1.5.4"
    implementation "androidx.compose.material:material:1.5.4"
    
    // Navigation
    implementation "androidx.navigation:navigation-compose:2.7.5"
    
    // Hilt
    implementation "com.google.dagger:hilt-android:2.48.1"
    kapt "com.google.dagger:hilt-compiler:2.48.1"
    
    // WorkManager
    implementation "androidx.work:work-runtime-ktx:2.8.1"
}
相关推荐
deli00715 分钟前
32K 上下文塞满后,AI 最先忘掉什么?120 轮对话实测
前端
deli0071 小时前
手机拍灯为什么有一条条黑纹?PWM 240Hz 实测
前端
wangruofeng6 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
wangruofeng6 小时前
给前端开发者的 100 个设计参考网站
前端·设计
星栈9 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技9 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户479492835691510 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马12 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng12 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding13 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js