【发布时间】:2014-10-31 07:25:22
【问题描述】:
我正在将一个可运行文件传递给服务。可运行的持续时间可能比通过它的片段/活动长。我想知道以下代码 sn-p 是否会通过在可运行文件中维护引用来泄漏 frag 对象?我意识到我可以将包含 frag 的整行移到可运行文件之外(就像我对“String key = frag ...”所做的那样),但我只是想了解匿名类如何/何时泄漏对象。
我真的不确定。 runnable 只需要 frag 在初始化实例时确定一个变量,并在此处内联初始化。所以理论上,创建内联实例后不需要对 frag 有任何引用。
如果我在 run() 函数中有对 frag 的引用,我认为会保证泄漏,因为它需要让 frag 保持活动状态才能在将来的某个时间引用它(并且 frag 很可能是 gc' d当时,但仅供参考)。
private static void fg_downloadFile(final FragMyDrive frag, final File file, final Drive drive){
final String key = frag.getCastedActivity().getKey();
Runnable rx_downloadFile = new Runnable() {
Context ServiceContext = frag.getCastedActivity().mService;
@Override
public void run() {
bg_downloadFile(ServiceContext, key, file, drive);
}
};
//.... Submit runnable to service...
}
【问题讨论】:
标签: java android memory-leaks anonymous-class