2013-04-23 40 views
1

所以,我正在制作一个应用程序,它在主类/活动中有一个处理程序。 我得到了警告,我应该声明它是静态的,以防止内存泄漏。
因此,我阅读了一些解释问题的文章,并且我知道理解它(并将处理程序更改为静态并使用弱引用)。从静态方法更改非静态值

但是,这里来了我的问题:
我需要处理程序来更改某些非静态变量(或调用一个方法)。我不想声明这些变量是静态的,因为它没有多大意义(它们应该属于主类的实例,而不属于类本身)。

我该怎么做?

我已经看到一段代码,其中有人创建了一个主类的实例,然后用它来改变非静态变量的值或调用非静态方法。 对我来说这似乎很奇怪,因为当创建新实例并使用该实例中的变量时,我的程序如何知道我正在讨论与我之前在程序中相同的“myInt”或“myString”。

原谅我,如果这是没有意义的,或者如果我没有解释得很好,我还是福利局

+0

你需要一个'接口'。您的处理程序实现了一种更新方法,通知消费者何时发生了有趣的事消费者(类实例)实现相同的接口并在发生事件时接收回调。就像一个'onClickListener',但定义你的方式。 http://stackoverflow.com/questions/14660671/how-to-notify-an-activity-when-globalvariables-are-changed/14660808#14660808 – Simon 2013-04-23 18:36:37

回答

0

你可以保持一个参考主类的静态变量(假设有只有一个实例主要的类),否则你可以传递一个对主类的引用作为静态方法的一个参数

你是对的,你不想在静态方法中实例化一个新的主类 - 不会影响主类的任何其他副本(除非您仅更改副本的静态方法/属性,在这种情况下,您应该可以在没有主类的情况下执行此操作)

+1

这看起来像我什么都没有,但稍微复杂的静态变量。 – Keppil 2013-04-23 18:16:49

+0

@Keppil我同意但我能做些什么来解决我的问题?我应该创建一个值为“this”的静态变量吗?我认为必须有更好/更正确的方法来做我想做的事情 – whoami 2013-04-23 19:29:08

+0

@arijspieter:我认为你有某种设计问题。据我所知,有一个静态方法来更新非静态方法没有明智的方法,它不需要。 – Keppil 2013-04-23 19:32:51