我们可能是白痴试图解决这个问题。我们的核心竞争力是iOS而不是Android。说实话,我们希望我们错过了一些关于Android架构的大联盟基本知识。
我们有一个iOS应用程序架构,可以根据各种数据和逻辑动态组装和呈现UIViewControllers。一组DisplayManagers(我们的术语)评估各种数据,以动态创建,配置和呈现应用程序的UIViewControllers。
我们完全不知道如何使这种模式适应Android。
核心问题:
onBackPressed()
并确保它不可触摸等等。到目前为止,这不是我们面临这个问题的唯一用例,但展示我们的挑战是一个很好的用例。
我们根据各种逻辑和数据动态显示,隐藏和链接用户提示。该数据可以通过多种方式进行更改,包括实时数据库更改(通过Firebase)。在iOS上,我们有一个PromptManager
单例,可以监听相应的Firebase数据,并且在它收听的数据发生变化时,会评估是否应该显示提示。
在iOS上,PromptManager
与PromptVC
协同工作,以管理可能的提示链。 PromptManager
创建并管理UINavigationController以显示一系列提示。 PromptVC
只知道它应该显示的当前提示。在用户交互时,它会通知响应的PromptManager
,PromptManager
决定是否再向另一个PromptVC
提示另一个提示,或者解除整个UINavigationController(已经持有所有提示)。
“那么问题是什么?只需将PromptManager
和PromptVC
合并为PromptActivity
。”
啊,如果我们可以......如果Firebase中的值更改应该触发提示会怎么样? PromptActivity
必须始终存在并准备好听取这些变化 - 根据上述“核心问题”,这是有问题的。此外,如上所述,这些提示是许多需要根据Firebase数据事件进行更改的实例之一,因此我们最终会有几十个(或更多)活动因为他们正在收听Firebase而永远不会关闭引用。
Singleton“DisplayManagers”负责监听数据,然后创建/更新/管理/解雇活动。它们与不同的活动交互以显示/隐藏自己并更新当前活动中的数据。但要做到这一点,我们需要能够继续引用我们从这些单身人士创建的活动。
对于世界上所有善良的人来说,有没有人知道Android上是否可以使用这样的模式?因为它在iOS上很华丽......
答案 0 :(得分:1)
我肯定会为此使用一个Activity,并使用多个Fragments。
可以首先显示或不显示片段,因此您可以完全控制片段的生命周期。
您可以在1个活动中拥有多个碎片。
片段可以根据呈现给他们的数据创建所需的布局。
您永远不应该依赖当前未显示的活动。如果Android需要释放内存,那么这些活动可以在任何时候被杀死(尽管极少见,主要是在低端手机上)。
要收听Firebase事件,您应该有一个处理它的服务。 该服务不直接与任何活动/片段绑定,并且独立存在。
然后,无论何时显示片段,它都会向服务添加一个侦听器。然后,该服务可以使用该侦听器通知片段任何传入的更改,并且片段可以相应地执行操作。
您应该查看RxAndroid库。它的构建基于来自各种来源的传入事件来调整UI,并保持所有数据的同步。
如果您有疑问,请随意提出任何问题,但在Android上这种设置肯定是可行的。
编辑:
对评论的回复(更容易在此处写长信息而不是在评论中):
服务将绑定到每个活动(称为"绑定服务"),并且活动将保留对活动中所有碎片的引用。所以服务可以调用Activity,Activity会相应地行动(删除/添加片段,解散自己等)
这也可能是另一种方式,Activity使用一些数据调用服务,而Service可以做某事(比如调用后端API或类似的东西)。
服务的好处是他们从Context继承。这意味着您可以直接从您的服务开始新的活动。
PS:"希望将我们的iOS实现直接迁移到Android",谢谢你的傻笑:)