我将我的应用程序从普通的SQLite迁移到使用Room,以使其更加强大. 现在我有了一个Flow,它从我的ASO内的数据库中查询所有用户:
@Query("SELECT * FROM users")
fun getAllAsFlow(): Flow<List<UserData>>
在我的存储库中,我将其公开为:
val allUsersFlow: Flow<List<UserData>> = userDao.getAllAsFlow()
然后在我的视图模型中:
val allUsers: Flow<List<UserData>> = repository.allUsersFlow
最终将其收集在具有生命力的可组合物中
val users by usersPageViewModel.allUsers.collectAsStateWithLifecycle(initialValue = listOf())
现在一切都按预期运行,但当我导航到另一个页面(通过按栈),然后再次弹出它时,Compable会重新组合,用户在再次获取数据之前是一个空列表,这导致屏幕视图一瞬间空.
现在,如果我用collectAsState
替换collectAsStateWithLifecycle
,这种情况不会发生,因为集合不知道第一个屏幕进入后台.
那么,实现collectAsState
行为的最佳方法是什么,但仍然了解应用程序的全球生命周期(例如,进入后台).我可以通过collectAsStateWithLifecycle
种主要活动生命周期吗?