Android ListFragment:防止getListView()和onDestroyView()之间的竞争条件

Android ListFragment:防止getListView()和onDestroyView()之间的竞争条件,android,race-condition,android-listfragment,Android,Race Condition,Android Listfragment,我有一个列表片段,我想定期更新。更新过程本身相当复杂,可能需要一些时间。这就是为什么我创建了一个线程,在上一次更新完成5秒后执行新的更新。然后我创建一个处理程序来更新列表,同时跟踪列表中的位置 问题在于,通过在我的ViewPager中的片段之间快速滑动,我可以强制执行竞争条件:onDestroyView()可以在处理程序调用getListView()之前调用,从而导致以下错误: java.lang.IllegalStateException:尚未创建内容视图 我的问题是:我怎样才能防止这种比赛状

我有一个
列表片段
,我想定期更新。更新过程本身相当复杂,可能需要一些时间。这就是为什么我创建了一个线程,在上一次更新完成5秒后执行新的更新。然后我创建一个处理程序来更新列表,同时跟踪列表中的位置

问题在于,通过在我的
ViewPager
中的片段之间快速滑动,我可以强制执行竞争条件:
onDestroyView()
可以在处理程序调用
getListView()
之前调用,从而导致以下错误:

java.lang.IllegalStateException:尚未创建内容视图

我的问题是:我怎样才能防止这种比赛状态?有没有办法检查视图是否仍然存在?不幸的是,仅检查以下代码中的
updateThread
是否被中断是不够的

公共类MyFragment扩展了ListFragment{
私有线程updateThread=null;
公众假期开始日期(){
/*杀死旧线程*/
if(updateThread!=null){
updateThread.interrupt();
}
最终处理程序=新处理程序();
Runnable r=新的Runnable(){
@凌驾
公开募捐{
while(true){
//…在适配器中收集数据`
最终阵列适配器ada=适配器;
handler.post(新的Runnable(){
@凌驾
公开募捐{
if(ada!=null){
//恢复视图位置
int index=getListView().getFirstVisiblePosition();//此处崩溃
视图v=getListView().getChildAt(0);
int top=(v==null)?0:v.getTop();
setListAdapter(ada);
ada.notifyDataSetChanged();
getListView().setSelectionFromTop(索引,顶部);
}
}
});
//…睡一会儿
}
}
};
updateThread=新线程(r);
updateThread.start();//开始更新
}
@凌驾
public void setUserVisibleHint(布尔值isVisibleToUser){
super.setUserVisibleHint(isVisibleToUser);
如果(isVisibleToUser){
startUpdate();
}否则{
if(updateThread!=null){
updateThread.interrupt();
}
}
}
}
尝试使用检查片段是否已附加到活动