zoukankan      html  css  js  c++  java
  • Android 后台线程,timertask实现定期更新时间

    简述:这是一类定时功能的原型,用来在后台线程中运行一些定时的服务,比如定时修改时间

    知识点:

    1. Android多线程的消息通信(handler)

    2. Java中时间的获取,以及String的格式化(SimpleDateFormat)

    3. Android PostDelay 的定期的实现

    4. timertask实现定期更新

    在这里我们就对于handler的方法,开一个新的Thread每隔3秒, 用来定时修改一个TextView的时间。对于timertask,道理也是一样的,调用schedule方法,每隔三秒更新一次。

    1.使用handler的方法:

        protected void updateClock2Time(boolean isChecked)
        {
            if (isChecked) {
                updateCurrentTime = new Thread() {
                    @Override
                    public void run()
                    {
                        SimpleDateFormat formatter = new SimpleDateFormat(
                                "HH:mm:ss");
                        Date curDate = new Date(System.currentTimeMillis());
                        String currentTime = formatter.format(curDate);
                        message = handler.obtainMessage(UPDATE_MY_TV, currentTime);
                        handler.sendMessage(message);
                        // use Handler to control the time
                        handler.postDelayed(this, 3000);
                    }
                };
                updateCurrentTime.start();
            } else {
                handler.removeCallbacks(updateCurrentTime);
            }
        }
        @SuppressLint("HandlerLeak")
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg)
            {
                switch (msg.what) {
                case UPDATE_MY_TV:
                    String currentTime = (String) msg.obj;
                    clock2.setText("Current Time: " + currentTime);
                    break;
                }
            }
        };

    2.使用timertask的方法:

        class MyTimerTask extends TimerTask
        {
            @Override
            public void run()
            {
                SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
                Date date = new Date();
                cTime = format.format(date);
                messageHandler.sendMessage(messageHandler.obtainMessage());
            }
        };
        private Handler messageHandler = new Handler() {
    
            @Override
            public void handleMessage(Message msg)
            {
                clock1.setText("Current Time: " + cTime);
                super.handleMessage(msg);
            }
        };
        protected void updateClock1Time(boolean isChecked)
        {
            if (isChecked) {
                timer = new Timer();
                MyTimerTask task = new MyTimerTask();
                timer.schedule(task, 3000, 3000);
            } else {
                timer.cancel();
            }
        }
  • 相关阅读:
    开源一个适用iOS的数据库表结构更新机制的代码
    耗油是什么??主要起什么作用???_百度知道
    跨平台C++ 功能全面的Socket类库,支持TCP,UDP,限速等等_陈华_新浪博客
    ASICME Avalon|阿瓦隆比特币矿机
    水淀粉_百度百科
    HyperDex.org
    不忘初心:从阿里运维工程师到水果贩子的“降级”路 | 卖水果的工程师
    用Github账号领Ripple币
    简洁 轻快 完美支持 Windows 8 Modern UI 单行输入,轻盈流畅
    赴美旅游签证,不求人!
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4189718.html
Copyright © 2011-2022 走看看