[英]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.