启动应用程序时,应根据会议室数据选择启动活动。像这样:
如果没有用户(通过登录字符串存储在首选项中)-显示入口活动。
如果有用户但未设置他的propertyA
(默认为空),请在“活动”中显示他将选择其值的位置(此后不为空)。
否则显示一般活动。
第一个选项很容易检查,因为我们可以立即从首选项中加载值。但是要检查propertyA
,我需要通过登录名来获取用户,并且Room强制仅在后台进行操作,因此我们在这里需要异步逻辑。
我看到的解决方案:
显示步骤2中的活动(或一些临时活动),在用户准备好(加载)时更新为必要。不好,因为用户会看到错误的内容。此外,为避免不必要的更新,我们应该存储最后一个属性值-因此,仅当从null更改为其他内容时,才更改为常规Activity(这样我们就可以为简单的任务弄乱代码)。
房间数据库的allowMainThreadQueries()
。不好,因为它破坏了Room的总体思路。
信号量(在主线程上,但是期望用户加载是一项快速的任务)。不好,因为在代码中看起来很丑陋,并且与第2步有相同的问题。
我想我的方法是完全错误的(在体系结构方面)。您能建议如何以更优雅的方式解决它吗?
答案 0 :(得分:1)
老实说,考虑到您的问题,我不会选择您列出的三个选项中的任何一个。
由于您的应用依赖于获取数据才知道向用户显示什么内容,为什么不使用启动屏幕?
启动屏幕已添加到“材料设计”中,如果您希望进行一些初始启动过程而不牺牲美观性或显示数据不准确的风险,这是一个不错的选择。
这是启动屏幕的链接:https://material.io/design/communication/launch-screen.html
即使您既不使用占位符用户界面也不使用品牌启动屏幕,也可以在设置了propertyA
的情况下向用户显示简短的动画,这对于您的应用程序查询还是更加令人愉快的。