使用匿名类处理程序计时器任务线程避免内存泄漏
在 android 中,每个开发人员在项目中至少使用一次 Anonymous Class
(Runnable)。任何 Anonymous Class
都有对其父(活动)的引用。如果我们执行长时间运行的任务,则在任务结束之前不会销毁父活动。
示例使用 handler 和 Anonymous Runnable
类。当我们在 Runnable
完成之前退出活动时,内存将会泄漏。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// do abc long 5s or so
}
}, 10000); // run "do abc" after 10s. It same as timer, thread...
我们如何解决?
- 不要用
Anonymous Class
进行任何长时间操作,否则我们需要一个Static class
并将WeakReference
传递给它(例如活动,视图……)。Thread
与Anonymous Class
相同。 - 当活动被破坏时取消
Handler
,Timer
。