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

  • 相关阅读:
    linux驱动开发学习一:创建一个字符设备
    如何高效的对有序数组去重
    找到缺失的第一个正整数
    .NET不可变集合已经正式发布
    中国人唯一不认可的成功——就是家庭的和睦,人生的平淡【转】
    自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
    ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
    自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
    ServiceStack 介绍
    一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
  • 原文地址:https://www.cnblogs.com/Isaber-blogs/p/3213786.html
Copyright © 2011-2022 走看看