2013-04-05 52 views
0

我有一个片段。在这个片段中,我有一个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停止所有工作,然后才能更改片段。

谢谢:)

+0

发表您的片段开关的代码,包括在其上 – 2013-04-05 02:26:36

+0

@Arju我已经编辑我的职务的方法。请为我查看。谢谢:) – hqt 2013-04-05 02:47:08

+0

你确定你的onpause被调用,使用日志进行调试 – 2013-04-05 13:12:26

回答

1

看起来好像onHiddenChanged(boolean hidden)是你需要的。从FragmentonPause()文档:

这通常依赖于Activity.onPause含有 活动的生命周期。

因此当片段不再可见时,不一定调用onPause()。将您的定时器取消代码移动到onHiddenChanged()

1

您的片段可能不会通过切换显示的片段进入背景。它的生命周期取决于活动。我认为如果您将Log.d("yourFragment", "onPause()");添加到onPause()方法中,您会发现这是真实的。

片段的生命周期可以在这里找到:

http://developer.android.com/guide/components/fragments.html

注意,它说,当你的片段被删除/更换,但如果你只是显示从活动的另一个片段不算数;)

0

把你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