post runnable可以在运行的视图上获得空引用吗?

时间:2018-06-14 12:16:52

标签: android android-layout android-runonuithread

当我们注册点击监听器等作为常规做法时,我们检查视图是否仍然存在,例如。

final View someView = ...;  
someView.setOnClickListener( (l) -> {
  if(someView != null) {   
     // access view
  } 
});   

因为在调用监听器时,视图可能已丢失 但在以下情况中:

View someView = ...;  
someView.post(() -> {
    // can someView be null here?  
});   

1 个答案:

答案 0 :(得分:1)

实际上可以。如果您阅读docs

  

使Runnable添加到消息队列中。可运行的   将在用户界面线程上运行。

View类中的post()方法只是将一个runnable添加到MainThread的MessageQueue中。这个runnable将在某个时刻运行,如果你的视图(Activity)在此期间被破坏,那个runnable中someView的使用会导致内存泄漏(可能为null)。即使someView被破坏,runnable仍将保持对它的引用(空引用),并且只有在执行run方法时才会释放它。