传递应用程序活动方法的命令模式?

时间:2012-07-02 13:05:34

标签: android memory-leaks android-activity command-pattern java-memory-model

在阅读了@RomainGuy的Avoiding memory leaks文章之后,我意识到我当前的Android应用程序一直困扰着传递应用程序主要活动的错误。所以每当我,我可以简单地用Activity.getApplicationContext()替换该活动参数。

但我的应用程序中仍有某些类仍然需要运行只能是应用程序主要活动成员的方法。

因此我考虑使用Command Pattern来解决此限制。

问题在于,如果我们看一下这个例子:

public class SomeCommandExecuableOnlyByActivity implements Command 
{
    public void execute(Object data) 
    {
        doIt( ((MyActivity)data).getWindow() );
    }    
}

我再次进入需要传递活动的死角(此时伪装成Object数据)。

如何摆脱这种"鸡肉&鸡蛋"情况?

有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:3)

我认为你在这里可能缺少的是正确的关注点分离。如果你说你必须将你的主要活动传递给其他活动以便调用它上面的某些功能,那么在我看来你的应用程序架构有一些基本的设计缺陷。

这里是否使用命令模式我无法分辨,但我通常做的是确定那些需要共享访问的方法,将它们移动到一个单独的类,然后在所有类中保留该类的单独实例需要此功能的活动,或者如果您需要共享实例状态,请在全局应用程序上下文中创建它并提供它的全局访问路径(不可取,但没有像RoboGuice这样的DI框架,在Android上实现DI非常困难,因为构造函数被渲染为无效。)

在我看来,在设计良好的Android应用程序中,Activity没有业务逻辑,只提供改变UI状态的操作。用户界面或任何其他计算的流程将留给其他类。 Model-View-Presenter pattern极大地帮助您保持代码的合理性。

虽然没有让我们更深入地了解你正在努力实现的目标,但很难给出具体的建议。