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"
}
相关推荐
UXbot10 分钟前
AI原型设计工具如何支持团队协作与快速迭代
前端·交互·个人开发·ai编程·原型模式
ZC跨境爬虫1 小时前
跟着MDN学HTML_day_48:(Node接口)
前端·javascript·ui·html·音视频
PieroPc2 小时前
CAMWATCH — 局域网摄像头监控系统 Fastapi + html
前端·python·html·fastapi·监控
巴巴博一4 小时前
2026 最新:Trae / Cursor 一键接入 taste-skill 完整教程(让 AI 前端告别“AI 味”)
前端·ai·ai编程
kyriewen4 小时前
半夜三点线上崩了,AI替我背了锅——用AI排错,五分钟定位三年老bug
前端·javascript·ai编程
kyriewen4 小时前
我让 AI 当了 24 小时全年无休的“毒舌考官”
前端·ci/cd·ai编程
hexu_blog4 小时前
vue+java实现图片批量压缩
java·前端·vue.js
IT_陈寒4 小时前
为什么你应该学习JavaScript?
前端·人工智能·后端
lifejump5 小时前
Empire(帝国)CMS 7.5 XSS注入
前端·安全·xss
无风听海5 小时前
OAuth 2.0 前端通道与后端通道深入剖析
前端·oauth