0

我正在寻找一些设计模式来使用Android应用程序中的一组Activity。我目前正在开发一个应用程序,我觉得它会在用户界面的很多修订之前进行,直到它的“最终”版本(如果有的话)。我在模式中使用Service中的控制器思考了一些问题,但我找不到任何好的例子。我发现唯一常见的参考是使用AIDL进行进程间接口绑定,这将不适用。Android MVC设计模式

基本上我想是用于Activity实现诸如showLoginScreen()loginError()等使得任何UI应该能够实现(该控制器不直接依赖于该视图中,只有它的接口)定义的Interface。如果这是最简单的方法来实现这一点,那么获取句柄到活动Activity s的最佳接受方式是什么?我一直很困惑当你调用一个不活动的Activity上的方法时会发生什么。

我正在考虑沿着Application类中的Map行作为单例吗? Mapput()/remove()将被连接到onStart()onPause()。尽管如此,这仍然不能保证Activity仍然存在...可以通过密钥上的get()获得参考,然后在Service有机会调用其接口之前它可以是paused()

任何建议或见解,将不胜感激。

编辑:我已经看过其他职位如MVC pattern on Android但他们大多没有解决执行(和接受的答案我只是平了不同意反正)

+0

为什么你想要有多个活动?每个活动是否代表您在MVC中的视图? – Noel 2011-06-11 23:54:09

+0

每个Activity都是一个用户需要与之交互的独立屏幕。他们不会尝试完成相同任务的多项活动。除了全屏3D游戏,我不知道只有一个活动的任何应用程序。 – Ryan 2011-06-11 23:58:01

+0

您是否考虑过使用单个Activity作为您的控制器,然后在运行时动态切换屏幕/视图? – Noel 2011-06-12 00:04:54

回答

1

要使用你的活动之间的观察者/可观察模式和您的服务,您将需要使用Bound services

这样,您可以获得IBinder的句柄,它可以充当您的Observable,您不必担心AIDL。您可以确保服务已被绑定到您的ServiceConnection中的onServiceConnected()方法中。请记住,只要存在与其绑定的活动,您的服务就会处于活动状态,否则它将被停止。

我会推荐阅读android Bound Services文档,因为它很好地解释了使用情况。

+0

非常感谢。你能否澄清一下,如果活动注册为服务的观察者会发生什么,然后一个事件被解雇,迭代所有注册的观察者,并遇到一个不活跃的事件? – Ryan 2011-06-12 17:22:43

+0

我实际上会取消注册该活动的onPause()或onStop()中的服务并解除绑定。然后,再次在o​​nResume()或onStart()中绑定到服务,并在onServiceConnected()中注册侦听器。在我的onServiceConnected()中,我会问IBinder(或者任何你观察的),看看我在模型中观察到的最新版本。这是否适用于你正在尝试做的事情? – Noel 2011-06-12 17:57:26

+0

是的,它的确如此,我感兴趣的是什么“种族”条件,如果有的话...我们将会看到= P再次感谢。 – Ryan 2011-06-12 18:37:09