2013-04-05 73 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