使用匿名类处理程序计时器任务线程避免内存泄漏

在 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...

我们如何解决?

  1. 不要用 Anonymous Class 进行任何长时间操作,否则我们需要一个 Static class 并将 WeakReference 传递给它(例如活动,视图……)。ThreadAnonymous Class 相同。
  2. 当活动被破坏时取消 HandlerTimer