将计时器传递给WeakReference

时间:2013-10-28 21:36:56

标签: android performance timer

我不是WeakReferences的专家,因为我现在正在熟悉他们。

我在我的活动中使用TimerTimerTask。 众所周知,只要你在它们上面调用cancel(),就不能重复使用定时器,直到你创建它的新实例。

所以我正在做的是在我的活动中全局创建Timer

Timer timer;

并在我的onResume()中,我通过timer = new Timer();

实例化它

这样做的原因是避免Timer already cancelled例外。因为当移动设备获得屏幕锁定或其他任何内容时,可能会调用onPause(),我在timer.cancel()方法中调用onPause()

我的问题是,当计时器被取消时,它会自动变为Garbage collection,因为再次使用AFAIK完全没有意义。如果是这种情况,收集的速度有多快?

使用WeakReference这里派上用场了吗?如果没有,它在哪里使用它?

1 个答案:

答案 0 :(得分:0)

无论是否有资格使用Timer,您都无法保留WeakReferenceTimer个实例,因为正如您所说的那样,{{1}之后不能重复使用它}。

cancel()对于跟踪可以使用的对象很有用,但如果没有其他人使用它,则不希望将该对象保留在RAM中(即没有人保持[硬] ]引用它)。然后它将被GC,你的WeakReference也变得无用。 (并且您不会通过仅保留WeakReference来阻止对象的GC。

嗯,希望它不是太模糊。

我个人使用WeekReference粗略了解junit测试中可能存在的内存泄漏。

我可以给你另一个用法示例 - 而不是在WeakReferences类中定义的自定义内部Handler类,它隐式引用了你的Activity并且可能会产生潜在的内存泄漏,您可以将自定义Activity定义为静态嵌套类,并将Handler class实例作为私有成员保留在WeakReference实例中,这样您就可以继续在自定义{{}内调用Activity方法1}} class。