You need to enable JavaScript to run this app. Android Kotlin Room codelab中getTonightFromDatabase()的设计疑问
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin Room codelab中getTonightFromDatabase()的设计疑问

《Android Kotlin基础》6.2节《协程与Room》实战练习疑问

涉及的SleepTrackerViewModel核心代码片段

private var tonight = MutableLiveData<SleepNight?>()

private suspend fun getTonightFromDatabase(): SleepNight? {
    var night = database.getTonight()  // 该方法用于获取最近的一条睡眠记录
    // 若该睡眠记录已完成(已设置结束时间)则返回null
    if (night?.endTimeMilli != night?.startTimeMilli) {
        night = null
    }
    return night
}

fun onStartTracking() {
    viewModelScope.launch {
        val newNight = SleepNight()
        insert(newNight)
        tonight.value = getTonightFromDatabase()
    }
}

fun onStopTracking() {
    viewModelScope.launch {
        val oldNight = tonight.value ?: return@launch
        oldNight.endTimeMilli = System.currentTimeMillis()
        update(oldNight)
    }
}

具体疑问

  • 仅在onStartTracking()方法中调用的getTonightFromDatabase()方法存在的必要性是什么?从逻辑上看,onStartTracking()的最后一行代码完全可以直接替换为tonight.value = newNight,为什么要绕开内存中的新建对象、重新从数据库查询后赋值?
  • getTonightFromDatabase()方法内部的条件判断逻辑设计意义是什么?也就是代码中注释提到的“若睡眠记录已完成(已设置结束时间)则返回null”这个判断,背后的设计考量是什么?

内容的提问来源于stack exchange,提问作者Ellen Spertus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 07:27:03