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"
}
相关推荐
东风破_17 小时前
Docker 基础:为什么需要容器?
前端·后端·nginx
东风破_18 小时前
Docker 实战:使用 Nginx 作为容器入口代理 Node 服务
前端·后端·nginx
你别说话了18 小时前
Vue项目解决跨域
前端·javascript·vue.js
唐青枫19 小时前
http-server:别再双击 index.html,一条命令把目录变成网站
前端·javascript
网安蟹佬霸19 小时前
OSINT开源情报收集实战:从信息搜集到资产测绘(2026最新万字保姆级指南)
前端·网络·安全·web安全·网络安全·开源
a11177620 小时前
3D历史建筑展览馆 THreeJS 开源
前端·开源
单线程_0120 小时前
【源码阅读】Vue3 Tokenizer 词法分析器完整状态机流转深度梳理(3.4+ 新版架构)
前端
PBitW20 小时前
PM 丢来 3 个 Excel、12 个功能、4 种情形?用 TRAE Work 30 分钟整理成前端开发文档
前端·trae
风骏时光牛马1 天前
AIAgent高可用架构:弹性容错与故障自愈的落地实践
前端
IT_陈寒1 天前
Vue的响应式什么时候会失灵?这个坑我踩了
前端·人工智能·后端