簡體   English   中英

Android:如何等到Timer和Timertask完成UI線程的工作

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM