7

在阅读了@RomainGuy 的避免内存泄漏文章后,我意识到我当前的 Android 应用程序被传递应用程序的主要活动的错误所困扰。因此,无论何时,我都可以简单地用Activity.getApplicationContext()替换该活动参数。

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

因此,我在考虑可能使用命令模式来解决这个限制。

问题是,如果我们看那个例子:

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

我再次陷入需要绕过活动的死胡同(这次伪装成Object数据)。

我该如何摆脱这种“鸡与蛋”的局面?

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

4

1 回答 1

4

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

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

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

如果不让我们更深入地了解您到底想要实现什么,那么很难给出具体的建议。

于 2012-09-27T12:07:10.000 回答