Android_時間服務

    接着上一節,此次我查看了Android的時間服務,以爲幫助很大,解決了我不少疑問,下面我就本身總結了一下,加深了本身的印象,好記性不如爛筆頭,還真講得很不錯,收下吧?看下圖如何利用線程更新UI組件ide

   重點:post

  1】 經過兩個類Handler 和Timer 類,結合線程裏處理UI組件的模式,把不少知識系統的梳理。線程

  2】 預定時間Handler: 主要是以下3個方法來執行Runnable 對象對象

          handler.post(Runnable r);
        handler.postAtTime(Runnable r,long uptimeMillis);
        handler.postDelayed(Runnable r,long delayMillis);blog

 具體的能夠本身查看API...隊列

  3】 雖然Timer和Handler 的執行任務代碼都是放在run方法裏,可是Timer是在線程中執行run方法。而Handler是將執行的動做添加到Android系統的消息隊列裏,所以:在Timer的run方法裏不可以直接訪問UI組件,由於線程內不能跨線程。要是實現的話就要利用Handler接受Message:進程

  關鍵代碼以下:get

//更新UI的方法消息隊列

    private void setUI() {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                /**
                 * 這裏咱們不能直接調用UI界面的組件來更新,而應該使用Handler 來接收消息更新,這裏只要發出消息就能夠了
                 */
                Message message = new Message();
                message.what = 1;// 能夠發送多個消息,而後Handler接受不一樣的消息響應不一樣的時間
                handler.sendMessage(message);
            }
        }, 0, 500);// 間隔0.5秒,沒有延遲當即執行任務
    }it

 

 

    /** 利用線程更新GUI組件的方法 */    private Handler handler = new Handler() {        // handler接受消息,這裏來處理UI組件的更新        public void handleMessage(Message msg) {            // UI組件處理應該在這裏,而不該該在任務TimerTask 的run裏面            switch (msg.what) {            case 1:                // 下面是進程條的更新                int currentProgress = bar.getProgress() + 1;                if (currentProgress > bar.getMax())                    currentProgress = 0;                bar.setProgress(currentProgress);                break;            default:                break;            }        };    };

相關文章
相關標籤/搜索