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"
}
相关推荐
foxhuli2297 分钟前
禁止ifrmare标签上的文件,实现自动下载功能,并且隐藏工具栏
前端
青皮桔38 分钟前
CSS实现百分比水柱图
前端·css
影子信息43 分钟前
vue 前端动态导入文件 import.meta.glob
前端·javascript·vue.js
青阳流月1 小时前
1.vue权衡的艺术
前端·vue.js·开源
样子20181 小时前
Vue3 之dialog弹框简单制作
前端·javascript·vue.js·前端框架·ecmascript
kevin_水滴石穿1 小时前
Vue 中报错 TypeError: crypto$2.getRandomValues is not a function
前端·javascript·vue.js
孤水寒月2 小时前
给自己网站增加一个免费的AI助手,纯HTML
前端·人工智能·html
CoderLiu2 小时前
用这个MCP,只给大模型一个figma链接就能直接导出图片,还能自动压缩上传?
前端·llm·mcp
伍哥的传说2 小时前
鸿蒙系统(HarmonyOS)应用开发之实现电子签名效果
开发语言·前端·华为·harmonyos·鸿蒙·鸿蒙系统
海的诗篇_3 小时前
前端开发面试题总结-原生小程序部分
前端·javascript·面试·小程序·vue·html