展示Android JetPack进展的最佳实践?

展示Android JetPack进展的最佳实践?,android,user-interface,android-architecture-components,android-jetpack,long-running-processes,Android,User Interface,Android Architecture Components,Android Jetpack,Long Running Processes,我们应该异步初始化ViewModel。从本地SQLite数据库直接加载数据可能非常快(但并不总是如此)。如果我们从某个远程源提取数据,可能会有相当明显的延迟。所以用户需要一些关于它的视觉反馈,主用户界面必须不可用 当数据准备用于ViewModel或发送一些数据进行处理(等待ViewModel中的更改)时,显示进度的最佳做法是什么 例如,如果LiveData值为null,则切换到加载进度片段,并在那里准备ViewModel,并在准备就绪时切换回?但是ViewModel使用绑定到特定片段 只是在加载

我们应该异步初始化ViewModel。从本地SQLite数据库直接加载数据可能非常快(但并不总是如此)。如果我们从某个远程源提取数据,可能会有相当明显的延迟。所以用户需要一些关于它的视觉反馈,主用户界面必须不可用

当数据准备用于ViewModel或发送一些数据进行处理(等待ViewModel中的更改)时,显示进度的最佳做法是什么

例如,如果LiveData值为null,则切换到加载进度片段,并在那里准备ViewModel,并在准备就绪时切换回?但是ViewModel使用绑定到特定片段

只是在加载/处理数据时使某些根视图不可见?换句话说,在每个片段中添加一些进度部分来显示它,而不是主要内容? 但是这种方法需要太多的样板代码来处理很多布局

如果我们知道数据几乎是立即加载的,我们是否应该对此加以注意


如何在JetPack应用程序中处理长时间运行的操作界面?

我在官方文档和示例中找到了答案。 以下是两个部分:

  • 如何使用LiveData反馈进度
  • 如何在UI上呈现进度
  • 1) 答案在本文末尾

    向下滚动至“附录:公开网络状态”主题。 他们建议使用一些基于

    您必须编写和维护大量样板代码来包装任何需要跟踪进度或加载错误的LiveData

    2) 样本中 您可以找到如何在UI上反馈加载过程的建议方法。 这个示例非常基本,所以在加载过程中,它们只是隐藏UI小部件

    每个片段布局都应该有一些进度支持材料。这里我们只有一个变量:

    <data>
            <variable
                name="isLoading"
                type="boolean" />
    </data>
    
    因为它是应用程序定义的属性,所以我们必须在某个地方注意它。因此,应该有支持visibleGone的适配器:

    当然,我们可以使用FrameLayout之类的工具,放置一些进度面板,使控件变得模糊,并显示一些滚动的进度轮(而不是简单地隐藏它并显示空屏幕)。 但问题是,对于每个片段布局,您都必须注意它。如果你有一些复杂的屏幕(如标签),它只会使你的代码更加复杂

    结论:#2或多或少是可行的解决方案。尽管我更喜欢在所有情况下使用一些单独的进度片段屏幕,并且不会因为加载进度和错误处理内容而使我的每个片段布局变得臃肿

    但是,我不禁要问,使用LiveData的真正好处是什么?为了通过良好的错误处理、进度反馈正确地完成工作,我们需要维护太多的样板代码。 他们根据自己的指南主张权利:

    在上面推荐的应用程序架构部分,我们省略了网络 错误和加载状态以保持代码段简单

    因为LiveData的设计似乎不是为了便于进度和错误处理

    app:visibleGone="@{isLoading}"
    
    public class BindingAdapters {
        @BindingAdapter("visibleGone")
        public static void showHide(View view, boolean show) {
            view.setVisibility(show ? View.VISIBLE : View.GONE);
        }
    }