【问题标题】:Select activity depending on Room根据房间选择活动
【发布时间】:2019-02-25 21:18:21
【问题描述】:

当我启动我的应用程序时,我应该选择开始活动,具体取决于房间数据。像这样:

  1. 如果没有用户(通过登录字符串,存储在首选项中)- 显示入口 Activity。

  2. 如果有用户但他的propertyA 未设置(默认为空)- 显示活动,他将选择它的值(之后非空)。

  3. 否则显示常规活动。

第一个选项很容易检查,因为我们可以立即从首选项中加载值。但是要检查propertyA,我需要通过登录来获取用户,并且 Room 强制仅在后台执行此操作,因此我们需要在这里使用异步逻辑。

我看到了解决这个问题的选项:

  1. 显示第 2 步中的 Activity(或一些临时 Activity),当用户准备好(加载)时更新为必要的。不好,因为用户会看到错误的内容。此外,为了避免不必要的更新,我们应该存储最后一个属性值 - 所以我们只有在从 null 更改为其他值时才更改为通用 Activity(这样我们就会让简单任务的代码混乱)。

  2. 房间数据库的allowMainThreadQueries()。不好,因为打破了 Room 的总体思路。

  3. 信号量(在主线程上,但期望用户加载是一项快速任务)。不好,因为代码看起来很丑,并且与第 2 步有同样的问题。

我想我的方法是完全错误的(在架构方面)。你能建议如何以更优雅的方式解决它吗?

【问题讨论】:

    标签: android architecture android-room


    【解决方案1】:

    老实说,对于您的问题,我不会选择您列出的三个选项中的任何一个。

    由于您的应用依赖于在知道要向用户显示什么内容之前获取数据,为什么不使用启动屏幕?

    启动屏幕已添加到 Material Design 中,如果您希望在不牺牲美观或显示不准确数据的风险的情况下进行一些初始启动处理,这是一个不错的选择。

    这里是启动屏幕的链接:https://material.io/design/communication/launch-screen.html

    即使您不使用占位符 UI 或品牌启动屏幕,如果设置了 propertyA,在您的应用查询时向用户显示一个简短的动画仍然会更令人愉快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多