Timer使用

在Android中,用到timer時,代碼:

    private int second_counts;
   private Timer timer;//定時器
    private TimerTask timerTask;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            try {
                int count = (int )msg.obj;
                showTimeBar(count);
            }catch (Exception e){
                showTimeBar(0);
            }
        }
    };

    private void showTimeBar(int seconds){
        if (seconds<=0){
            destroyTimer();
            Log.e("tag_fly","over");
            return;
        }
        Log.e("Tag_fly","second:"+seconds);
    }

初始化:

 private void initTimer()
    {
        if (timer == null){
            timer = new Timer();
        }
        if (timerTask==null){
            timerTask = new TimerTask() {
                @Override
                public void run() {
                    Message m = new Message();
                    m.obj = second_counts;
                    handler.sendMessage(m);
                    second_counts--;
                }
            };
        }
    }

銷燬:

private void destroyTimer() {
        if (timer != null) {
            timer.cancel();
            timer = null;
        }
        if (timerTask != null) {
            timerTask.cancel();
            timerTask = null;
        }
    }
引入包名:
import android.os.Handler;
import android.os.Message;
import java.util.Timer;
import java.util.TimerTask;

調用:

 second_counts = 100;
 initTimer();
 timer.schedule(timerTask,0,1000);

回收:

    @Override
    protected void onStop() {
        super.onStop();
        destroyTimer();
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        destroyTimer();
    }

返回到當前控制器(activity):

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case RESTART_REQUESTCODE:
                if (second_counts>0){//此處判斷是否調用timer
                    initTimer();
                    timer.schedule(timerTask,0,1000);//重新啓動timer
                }
                break;
            default:
                break;
        }
    }

註釋:

調用其它界面,使用函數:

            startActivityForResult(intent, RESTART_REQUESTCODE);

當代碼中會多次調用timer時,需要在調用前,銷燬原來的timer,故此,啓動timer代碼可以優化爲:

 destroyTimer(); 
 second_counts = 100;
 initTimer();
 timer.schedule(timerTask,0,1000);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章