在我的Android应用程序中,我的一个活动包括我的其他类的实例化。 有些类需要写入屏幕。我希望将所有布局交互保持在顶层。 因此,我创建了一个接口,其中包含一个可以调用以输出到屏幕的方法列表。然后我在主Activity中实现此接口。 最后,在实例化类时,我将“this”传递给构造函数,并将其保存并用于回调。
我的问题是:由于我将Activity对象本身传递给其中一个对象,是否存在内存泄漏的危险?
答案 0 :(得分:2)
如果我正确理解了您的问题,您已将一些UI交互功能抽象到一个类中,并使用它来装饰您的活动。
你问题的简单答案是否定的。虽然您将“this”的实例传递给对象,但对象本身的范围由Activity控制。事实上,android框架会传递上下文,与你的工作并不十分相似。我相信我们都同意,活动的生命周期非常有限。
我想提出的第二点是关于整个方法本身。 Android提供了回发到主线程以执行UI交互的机制。 (post或asynctask等..)你应该使用这些机制之一对UI进行一些更改(在主线程中)。所以我的问题是,您是否可以使用asynctask编写匿名内部类来执行此操作,尤其是如果此功能仅对此Activity唯一。
答案 1 :(得分:2)
我会研究标准的Android Handler机制(也支持UI更改的自定义回调)。
以下是定义处理UI更改的自定义回调的处理程序示例:
只要你可以确保你的“this”的范围正确,你应该是非常安全的,但是,一旦你开始将活动传递给其他类,它确实会对潜在的内存泄漏敞开大门,就像代码片段现在可以获取该实例,并防止它在对象上应该发生垃圾收集时被垃圾收集。