我有一个Fragment
,它设置了一个ListView
,并创建了一个Handler
来定期更新Listview
。但是,看起来Handler
在Fragment
被销毁后仍然运行。
下面是代码。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//boilerplate code
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
assignAdapter();
handler.postDelayed(this, 15000);
}
});
return v;
}
在Fragment
被破坏后更新ListView
会导致应用崩溃。我如何才能在Fragment
被破坏时使Handler
停止?我还想知道暂停应用对Handler
有什么影响。
4条答案
按热度按时间ebdffaop1#
您需要实现如下处理程序
4jb9z9bj2#
您需要在片段中存储一个对处理程序和runnable的引用,然后当片段被销毁时,您需要从传入runnable的处理程序中删除回调。
wsewodh23#
另一种停止处理程序的方法是使用
WeakReference
到片段:其中
fragment.hasBeenDestroyed()
只是片段的mDestroyed
属性的获取器:xuo3flqw4#
有人发布了另一个类似的问题,这个问题是由于
ChildFragmentManager
中的一个bug引起的。基本上,当ChildFragmentManager
从Activity
分离时,ChildFragmentManager
以一个破坏的内部状态结束。请看一下original answer here