2

如果我有 object A,它调用 DAO 对象B来执行一些数据库更新 - 一旦B's函数完成,它会调用A( A.finishProcess()) 中的回调函数,这会产生内存问题吗?我的意思是在完成B之前是否会保留在内存中A?还是被BGC 删除了?

我问这个是因为我正在考虑使用回调而不是从B.

简而言之,“返回”结果对象而不是使用对调用对象的回调是更好的设计(和内存使用)吗?

PS:请忽略具体的,即它没有提到AsycnTask,这是一个人为的情况来解决我的问题:)

为任何帮助而欢呼

4

3 回答 3

1

当您拥有 DAO 对象时,您将为相应的回调注册您的类。

只需取消注册回调并删除您班级中 B 类的引用。

如下所示(这里的“b”是 B 类的对象)。

b.removeListener(this);
b = null;

这将告诉 JVM 对 B 类的引用不再存在,GC 会将其从内存中清除。

于 2012-06-05T07:29:09.203 回答
1

这都是关于参考的。只要您不存储/保留任何(强)引用(即正确取消注册,在对象不再使用时清除引用等),您就不必担心,因为对象将被正确处理GC。

于 2012-06-05T07:40:37.187 回答
0

我认为您使用回调会导致内存使用问题。如果没有,我已经感到困惑了。如果您提供代码,我们将更容易理解您的想法。

到目前为止,我阅读的有关内存问题或内存泄漏的最佳文档(由 IBM 命名)位于http://www.ibm.com/developerworks/library/j-leaks/

如果你得到一个数组、列表或其他对象,那么在可能的情况下,很容易尽快地尊重它。正如您所说,我通常会投票给结果对象。

于 2012-06-05T07:35:30.430 回答