当前位置: 首页 > 知识库问答 >
问题:

带有Presenter和保留片段的RxJava,用于配置更改

赵嘉赐
2023-03-14

我是RxJava的新手,并将其与MVP架构一起使用。

我发现了一些使用保留片段在配置更改时保存可观察对象的示例(仍然不确定这是否是最好的方法)。不过,我发现的示例是直接在活动或片段上处理可观察对象,而不是从演示者那里。

因此,我尝试并设置了这个快速示例(仅使用Reactivex的RxJava和RxAndroid库)以进行测试,看起来效果不错。此示例所做的是:

  1. 使用无头保留片段启动活动

我想知道我这样做是否正确,以及当在Presenter中处理可观察的订阅时,是否有更有效或更优雅的方法来处理配置更改?

编辑:感谢您的反馈。基于此,我得出了我认为更干净的解决方案,并用这些更改更新了我的链接示例。

有了新的变化;而不是将从演示者到活动的可观察性传递给要存储在配置更改事件中的retainedFraank,我宁愿在创建时将retainedFraank设置为演示者的第二个“视图”。

这样,当onResume()在设备旋转后发生时,我不需要让活动做丑陋的管道,将可观察的从保留的片段传递回演示者。

演示者可以直接与第二个“视图”交互,检查保留的可观察对象本身,并在需要时重新订阅。主要活动不再需要知道这个可观察的。突然间,它变成了一个简单得多的视图层。

共有3个答案

侯兴为
2023-03-14

该库https://github.com/MaksTuev/ferro包含另一种存储屏幕数据和管理后台任务的方法。

您的场景将如下所示

>

  • 打开活动,创建演示者

    推Btn

    演示者调用FakeService以获得可观察到的延迟(5秒)响应。

    配置已更改,演示者未被销毁,可观察性未被清除,所有rx事件被冻结

    活动已重新创建,演示者已重新使用,演示者在视图上显示以前加载的数据,所有rx事件均已解冻

    我觉得这个有帮助

  • 羊冠玉
    2023-03-14

    听起来不错,干得好!一些建议:

    • 您可以只使用活动。onRetainNonConfigurationInstance()。我听说它在Android N中已不再受欢迎。如果您喜欢,可以继续使用保留片段,这没有问题,但如果您不喜欢使用片段,则不必这样做
    岳嘉良
    2023-03-14

    看起来不错,你可以看到这个例子-https://github.com/krpiotrek/RetainFragmentSample

     类似资料:
    • 我读过,在呈现UI的片段上设置可能会导致内存泄漏。 有人能解释一下为什么会发生这种情况吗?我在任何地方都没有找到详细的解释。

    • 很可能是一个新手的问题,因为我对Android开发相当陌生——我在配置更改/导航时在我的@Composable中保存AndroidView的状态时遇到了麻烦,因为factory block被调用(如预期的那样)并且我的图表被重新实例化。 是一个具有复杂图表的第三方组件,我想保留缩放/滚动状态。我知道我可以使用ViewModel跨配置更改保存UI状态,但考虑到保存缩放/滚动状态的复杂性,我想问一下是

    • 我正在使用boto3从DynamoDB数据库中选择数据 工作罚款。现在我还想检索一个(不幸的是)用保留字命名的属性——比方说。 我得到一个错误就像 调用扫描操作时发生错误(ValidationException):无效的ProjectionExpression:属性名称是保留关键字;保留关键字:连接 我知道如果使用过滤器或查询,会有一种别名技术,但对于boto3的简单投影是否存在这种技术?

    • 配置文件中的指令可能适用于整个服务器,或者它们可能仅限于应用于特定目录,文件,主机或URL。本文档描述了如何使用配置片段容器或文件来更改其他配置指令的范围。 配置片段容器的类型 有两种基本类型的容器。大多数容器针对每个请求都会进行评估。随附的指令仅适用于与容器匹配的请求。另一方面,,和容器仅在服务器启动和重新启动时进行评估。如果糨们的条件在启动时为真,那么所附的指令将适用于所有请求。如果条件不为真

    • 我正在创建一种自定义方言来替换