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();
        }
    }
时间: 2024-12-19 15:35:04

Android 后台线程,timertask实现定期更新时间的相关文章

Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等

方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { public void run() { myView.invalidate(); } }).start(); 可以实现功能,刷新UI界面.但是这样是不行的,因为它违背了单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行. 方法二:(Thread+Handler)

【转】Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask

方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() {         public void run() {              myView.invalidate();         }            }).start(); 复制代码 可以实现功能,刷新UI界面.但是这样是不行的,因为它违背了单线程模型:Android UI操作并不

【转载】Android中UI线程与后台线程交互设计的5种方法

原帖地址:http://www.cr173.com/html/19165_1.html 在android的设计思想中,为了确保用户顺滑的操作体验.一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必须要重新开启一个后台线程运行这些任务.然而,往往这些任务最终又会直接或者间接的需要访问和控制UI控件.例如访问网络获取数据,然后需要将这些数据处理显示出来.就出现了上面所说的情况.原本这是在正常不过的现象了,但是android规定除了UI线程外,其他线程都不可以对那些UI控件访问

【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask

目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csdn.net/flowingflying/ 之前,我们直接在activity中执行http通信,在通信过程中可能会出现连接超时.socket超时等情况,超时阈值一般是秒级,例如AndroidHttpClient中设置的20秒,如果出现超时,就

Android关于线程更新UI的方法

Android关于线程更新UI的方法 在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的两种,除此之外还有Content Provider和Broadcast Receiver)都会跑在这个Process.   一个Android 程序默认情况下也只有一个Process,但一个Process下却可以有许多个Thread.   在

Android中UI线程与后台线程交互设计的5种方法

我想关于这个话题已经有很多前辈讨论过了.今天算是一次学习总结吧. 在android的设计思想中,为了确保用户顺滑的操作体验.一 些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必须要重新开启一个后台线程运行这些任务.然而,往往这些任务最终又会直接或者 间接的需要访问和控制UI控件.例如访问网络获取数据,然后需要将这些数据处理显示出来.就出现了上面所说的情况.原本这是在正常不过的现象了,但是 android规定除了UI线程外,其他线程都不可以对那些UI控件访问和操控.为了解决

android中子线程更新UI的方式浅析

一.为何写作此文 ??你是不是经常看到很多书籍中说:不能在子线程中操作ui,不然会报错.你是不是也遇到了如下的疑惑(见下面的代码): @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); Threa

Android 时间更新机制之网络更新时间

转载请注明出处:http://blog.csdn.net/droyon/article/details/45701257 综述:Android网络时间更新,大体分两类.1.moderm相关更新,2.网络更新.本次主要介绍网路更新时间,主要涉及到NetworkTimeUpdateService,该类运行在SystemServer(ActivityManagerService)进程中.它有点特殊,从名字来看,其实Service,其实它和WifiService.ConnectivityManagerS

winform 后台线程更新UI

//后台线程更新TextBox private void SetTextBox(TextBox txt, string value) { Action act = () => { txt.Text = value; }; if (txt.InvokeRequired) { txt.Invoke(act); } else { act(); } } private void TestThread() { int i = 0; while (true) { Thread.Sleep(1000); i+