Android:如何等待Timer和Timertask完成UI线程的工作
问题描述:
我有一个片段。在这个片段中,我有一个Timer定期运行一个timertask。我覆盖所以当切换片段,TimerTask和计时器将停止其工作。Android:如何等待Timer和Timertask完成UI线程的工作
,这里是我的切换片段代码:
OrderFragment fragment2 = new OrderFragment();
fragment2.setArguments(arguments);
getSupportFragmentManager().beginTransaction().replace(R.id.item_detail_container, fragment2).commit();
但是当我切换不同的片段,我经常收到Null Point Exception
因为TimerTask的不能再访问UI线程(因为我已经使用runOnUIThread
)
所以,我的问题是:如何确保Timer和TimerTask停止所有工作,然后才能更改片段。
谢谢:)
答
看起来好像onHiddenChanged(boolean hidden)是你需要的。从Fragment
onPause()
文档:
这通常依赖于Activity.onPause含有 活动的生命周期。
因此当片段不再可见时,不一定调用onPause()
。将您的定时器取消代码移动到onHiddenChanged()
。
答
您的片段可能不会通过切换显示的片段进入背景。它的生命周期取决于活动。我认为如果您将Log.d("yourFragment", "onPause()");
添加到onPause()方法中,您会发现这是真实的。
片段的生命周期可以在这里找到:
http://developer.android.com/guide/components/fragments.html
注意,它说,当你的片段被删除/更换,但如果你只是显示从活动的另一个片段不算数;)
答
把你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
发表您的片段开关的代码,包括在其上 – 2013-04-05 02:26:36
@Arju我已经编辑我的职务的方法。请为我查看。谢谢:) – hqt 2013-04-05 02:47:08
你确定你的onpause被调用,使用日志进行调试 – 2013-04-05 13:12:26