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"
}
相关推荐
风骏时光牛马几秒前
后端服务接口开发与性能优化
前端
kyriewen5 分钟前
我让 4 个 AI 互相 review 代码,最温柔的那个下手最狠
前端·程序员·ai编程
计算机魔术师17 分钟前
493家公司白砸AI钱?Apollo这组数据戳破了幻觉
前端
IT_陈寒38 分钟前
Java静态变量初始化坑得我头皮发麻
前端·人工智能·后端
柳杉1 小时前
用 Codex 完成智慧高速 3D 可视化大屏,从 18 张行业设计稿到可交互的运行监测中心
前端·ai编程·数据可视化
review445431 小时前
拿到 codex 第一步
前端·agent·vibecoding
鶴哥只手遮天1 小时前
jQuery 4.0 源码架构与工程实践-第 01 章 · 全景与工程结构:一个 20 岁库的自省
前端·javascript·jquery
徐小夕2 小时前
doc2docx方案,开源!
前端·vue.js·github
徐小夕2 小时前
JitOFD:一款面向信创与档案场景的 Web 端 OFD 编辑器
前端·vue.js·github
孟健2 小时前
Kimi K3.1 Pro 编程实测:3个月27万行代码,每年1.7万预算下如何9分钟修好顽固Bug
前端·开源·ai编程