zoukankan      html  css  js  c++  java
  • Android_时间服务

        接着上一节,这次我查看了Android的时间服务,觉得帮助很大,解决了我很多疑问,下面我就自己总结了一下,加深了自己的印象,好记性不如烂笔头,还真讲得很不错,收下吧?看下图如何利用线程更新UI组件

       重点:

      1】 通过两个类Handler 和Timer 类,结合线程里处理UI组件的模式,把很多知识系统的梳理。

      2】 预约时间Handler: 主要是如下3个方法来执行Runnable 对象

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

     具体的可以自己查看API...

      3】 虽然Timer和Handler 的执行任务代码都是放在run方法里,但是Timer是在线程中执行run方法。而Handler是将执行的动作添加到Android系统的消息队列里,因此:在Timer的run方法里不能够直接访问UI组件,因为线程内不能跨线程。要是实现的话就要利用Handler接受Message:

      关键代码如下:

    //更新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秒,没有延迟立即执行任务
        }

        /** 利用线程更新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;
                }
            };
        };

  • 相关阅读:
    学习ActiveMQ(五):activemq的五种消息类型和三种监听器类型
    学习ActiveMQ(三):发布/订阅模式(topic)演示
    学习ActiveMQ(二):点对点(队列)模式消息演示
    Linux系统基础优化及常用命令
    【原创】Access自动编号的初始值设置及重置编号
    【整理】引用类型与ref传递实例精解
    【原创】数据库操作类库整理
    【摘录】Random快速产生相同随机数的原因及解决方案
    【整理】辗转相除法求最大公约数算法证明
    【转载】access采用sql语句与msql的区别
  • 原文地址:https://www.cnblogs.com/Isaber-blogs/p/3213786.html
Copyright © 2011-2022 走看看