Android回调 - 这是一个潜在的内存泄漏?

时间:2011-04-08 07:11:22

标签: android memory-leaks android-activity callback

在我的Android应用程序中,我的一个活动包括我的其他类的实例化。 有些类需要写入屏幕。我希望将所有布局交互保持在顶层。 因此,我创建了一个接口,其中包含一个可以调用以输出到屏幕的方法列表。然后我在主Activity中实现此接口。 最后,在实例化类时,我将“this”传递给构造函数,并将其保存并用于回调。

我的问题是:由于我将Activity对象本身传递给其中一个对象,是否存在内存泄漏的危险?

2 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,您已将一些UI交互功能抽象到一个类中,并使用它来装饰您的活动。

你问题的简单答案是否定的。虽然您将“this”的实例传递给对象,但对象本身的范围由Activity控制。事实上,android框架会传递上下文,与你的工作并不十分相似。我相信我们都同意,活动的生命周期非常有限。

我想提出的第二点是关于整个方法本身。 Android提供了回发到主线程以执行UI交互的机制。 (post或asynctask等..)你应该使用这些机制之一对UI进行一些更改(在主线程中)。所以我的问题是,您是否可以使用asynctask编写匿名内部类来执行此操作,尤其是如果此功能仅对此Activity唯一。

答案 1 :(得分:2)

我会研究标准的Android Handler机制(也支持UI更改的自定义回调)。

以下是定义处理UI更改的自定义回调的处理程序示例:

http://developer.android.com/resources/samples/TicTacToeLib/src/com/example/android/tictactoe/library/GameActivity.html

只要你可以确保你的“this”的范围正确,你应该是非常安全的,但是,一旦你开始将活动传递给其他类,它确实会对潜在的内存泄漏敞开大门,就像代码片段现在可以获取该实例,并防止它在对象上应该发生垃圾收集时被垃圾收集。