SQLite 数据库操作
SQLiteOpenHelper
创建或升级数据库。 SQLiteDatabase
对象执行查询(rawQuery
或 execSQL
)。 Cursor
转换为实体类列表。 val db = helper.readableDatabase val cursor = db.query("table_name", null, null, null, null, null, null) val list = mutableListOf<Entity>() while (cursor.moveToNext()) { val item = Entity(cursor.getString(0), cursor.getInt(1)) list.add(item) } cursor.close()
Room 持久化库
@Dao
:定义数据库操作方法。 @Query
:支持复杂 SQL 查询。 LiveData
:自动感知数据变化并通知 UI。 @Dao interface UserDao { @Query("SELECT FROM user") fun getAllUsers(): LiveData<List<User>> }
远程 API 与本地数据库结合
LiveData
数据变化。 viewModelScope.launch { val apiResponse = retrofitService.getData() userDao.insertAll(apiResponse) }
缓存策略
OkHttp
缓存 + Room
存储 | 频繁访问的数据 |问题 | 解决方案 | 代码示例(Kotlin) |
---|---|---|
主线程卡顿 | 异步加载数据(协程/RxJava) | viewModelScope.launch { ... } |
内存泄漏 | 使用 ViewModel + LiveData |
val data: LiveData<List<T>> |
重复刷新 | 配合 NetworkBoundResource (WorkManager) |
自动处理网络与缓存切换 |
大数据集加载 | 分页查询(PagingSource ) |
Pager(config) { ... } |
问题1:数据加载过慢导致界面卡死
withContext(Dispatchers.IO)
处理耗时操作。 RecyclerView
的分页组件)。 问题2:数据更新后 UI 不刷新
LiveData
或未触发观察者回调。 LiveData
,update->postValue(newData)
。 LifecycleOwner
是否活跃(如 Activity
未销毁