在我的Android应用程序中,我的某个活动包括实例化我的其他类。其中一些类需要写入屏幕。我想将所有布局交互保留在顶层。因此,我创建了一个接口,其中包含可以调用以向屏幕输出的方法列表。然后,在主活动中实现此接口。最后,当实例化类时,我将“this”传递给构造函数,并将其保存并用于回调。我的问题是:由于我将Activity对象本身传递到其中一个对象中,是否存在内存泄漏的危险?
如果我正确理解您的问题,您已将一些 UI 交互功能抽象为一个类,并用其装饰了您的活动。简单的答案是不。虽然您将 "this" 的实例传递给对象,但对象本身的范围受 Activity 控制。实际上,Android 框架传递上下文,与您的做法并不相似。我相信我们都可以认同,Activity 的生命周期非常有限。我想要强调的第二个点是关于整个方法论本身。Android 提供了一种机制来回调主线程以执行 UI 交互(post 或 asynctask 等)。您应该使用其中一种机制在主线程中进行一些更改。所以我的问题是,如果这个功能仅适用于此 Activity,您是否可以编写一个匿名内部类来使用 asynctask 执行此操作。
我建议您查看标准的Android Handler机制(也支持自定义回调来进行UI更改)。以下是一个处理程序定义自定义回调以处理UI更改的示例: http://developer.android.com/resources/samples/TicTacToeLib/src/com/example/android/tictactoe/library/GameActivity.html 只要您能确保“this”被正确地作用域化,那么您就应该相当安全。然而,一旦您开始将活动传递给其他类,就会打开潜在内存泄漏的大门,因为代码片段现在可以获取该实例并防止它在应该回收对象的时间内被垃圾回收。