[英]Android : How to wait until Timer and Timertask finish their work on UI Thread
我有一个片段。 在这个片段中,我有一个定期运行timertask的Timer。 我重写onPause
所以当切换片段,TimerTask和定时器将停止它的工作。
@Override
public void onPause() {
super.onPause();
timerTask.cancel();
timer.cancel();
timer.purge();
}
这是我切换片段的代码:
OrderFragment fragment2 = new OrderFragment();
fragment2.setArguments(arguments);
getSupportFragmentManager().beginTransaction().replace(R.id.item_detail_container, fragment2).commit();
但是当我切换不同的片段时,我经常会收到Null Point Exception
因为TimerTask不能再访问UI Thread(因为我使用了runOnUIThread
)
所以,我的问题是:在我可以更改片段之前,如何确保Timer和TimerTask停止其所有工作。
谢谢 :)
只需切换显示的片段,您的片段就不会进入后台。 它的生命周期取决于Activity。 我想如果你添加Log.d("yourFragment", "onPause()");
对于onPause()方法,你会发现这是真的。
片段生命周期可以在这里找到:
http://developer.android.com/guide/components/fragments.html
请注意,它表示删除/替换片段的时间,但是如果您只是显示活动中不计数的另一个片段;)
似乎onHiddenChanged(布尔隐藏)就是你所需要的。 从Fragment
onPause()
文档:
这通常与Activity.onPause相关,包含Activity的生命周期。
因此,当片段不再可见时,不一定要调用onPause()
。 将计时器取消代码移动到onHiddenChanged()
。
把你的timer
.cancle作为上面的声明:
timer.cancel();
OrderFragment fragment2 = new OrderFragment();
fragment2.setArguments(arguments);
getSupportFragmentManager().beginTransaction().replace(R.id.item_detail_container,
fragment2).commit();
Declare private Timer timer; at class level
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.