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;            }        };    };

相关文章
相关标签/搜索