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
相关产品推荐
相关产品推荐

