视图被销毁时,视图处理程序未被清除

时间:2017-09-11 08:16:22

标签: android view nullpointerexception handler

我注意到视图被销毁时视图的处理程序没有被清除。 看看这个示例代码:

Handler viewHandler = view.getHandler();
if (viewHandler != null) {
    viewHandler.post(new Runnable() {
        @Override
        public void run() {
            view.doSmth();
        }
    });
}

在罕见的情况下,它可能会在NullPointerException方法中抛出run()

你们有没有解决这个问题的方法,每当我想在UI线程上执行某些操作时,在每个类中创建一个单独的处理程序(并手动管理它)?

1 个答案:

答案 0 :(得分:0)

试试此代码

Handler viewHandler = view.getHandler();
    if (viewHandler != null) {
        Runnable runnable=new Runnable() {
            @Override
            public void run() {
                view.doSmth();
            }
        };
        viewHandler.post(runnable);
    }

在onStop()

@Override
protected void onStop() {
    super.onStop();
    viewHandler.removeCallbacks(runnable);
  }