正确地将活动传递给非活动对象

7
在我的应用程序中,我有一个非活动对象,其作用是管理类。 许多时候,我需要将“源活动”作为参数传递给该管理器类的方法,以便对该活动进行某些操作。
例如,假设我们有一个叫MyActivity的活动需要执行一些toast操作。 所以我有一个名为MyManager的管理器类,并且在其中有这个方法。
raiseToast(Activity sourceActivity) {

  Toast.makeText(sourceActivity, demo, Toast.LENGTH_LONG).show();
}

我们从Myactivity类中这样调用该方法:

MyManager manager=new MyManager();
manager.raiseToast(MyActivity.this);

它运行良好。

我在这里问的是,将Activity作为参数传递给非Activity对象的正确方式吗? 我在真实设备上出现了内存泄漏问题(而不是模拟器),我想知道这是否也可能引起此问题?

谢谢Idan。

1个回答

4
你可以尝试在活动中传递获取应用程序上下文的getApplicationContext()。 为什么要有这个MyManager对象?你可以在活动中直接引发toast,而不必将其放在单独的类中。将你的raiseToast()方法移动到活动主体中,然后只需调用它即可。
编辑:请阅读http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html

1
当然,在这种情况下,这样做几乎是愚蠢的。我只是举了一个例子,当我需要将当前活动传递给某个非活动对象时,这种情况实际上是无用的,但在其他情况下,您可能只需要将内部逻辑与GUI(MVC)分离。那么,您如何确切地使用getApplicationContext()来实现它呢? - rayman
我应该如何从调用的Activity中发送参数,并且如何在管理器类中设置参数?谢谢。 - rayman
getApplicationContext() 是一个上下文方法。因此,您可以使用 getApplicationContext() 替换 manager.raitetoast(MyActivity.this); - Alex Volovoy
10倍,但是这到底如何减少泄漏? - rayman
如果您的对象泄漏,可能会将整个活动一起泄漏。请阅读我在答案中发布的URL上的文章。 - Alex Volovoy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接