view postDealy是否会造成内存泄漏呢?

 view.setEnabled(false);
 view.postDelayed(new Runnable() {
            @Override
            public void run() {
               view.setText("123456"); 
            }
        },10000);
        

如果像上面那样,10秒之后,activity销毁了这样写是否会有问题?
是否需要通过弱引用判断当前的activity是否存在呢?

阅读 6.5k
3 个回答

会造成内存泄漏,弱引用判断view是否存在即可。

只要手速够快,可能造成内存溢出。

Runnable#run()里没执行阻塞操作,Runnable#run()执行完,页面实例可能就会被回收了。

如果是在Acitity中,调用View#postDelayed(),那可以将参数中的Runnable保存起来,作为类的成员变量,最后重写Acitity#onDetachedFromWindow()方法时,调用View#removeCallbacks(),这样就能保证页面退出时及时取消View#postDelayed()的调用。

view.postdelay背后也是用的handler,所以会泄露
如果是我就直接用rx了。。。生命周期结束统一取消订阅,不用判断activity是否存在

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题