`

利用Handler定时更新Android UI

 
阅读更多

在 Android 里定时更新 UI,通常使用的是 java.util.Timerjava.util.TimerTaskandroid.os.Handler 组合,这里有相关的讨论。但实际上 Handler 自身已经提供了定时的功能。 

参考 android.os.Handler 的文档 

引用

There are two main uses for a Handler: (1) to schedule messages and runnables to be executed as some point in the future; and (2) to enqueue an action to be performed on a different thread than your own. 


Scheduling messages is accomplished with the post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long), sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long), and sendMessageDelayed(Message, long) methods. The post versions allow you to enqueue Runnable objects to be called by the message queue when they are received; the sendMessage versions allow you to enqueue a Message object containing a bundle of data that will be processed by the Handler's handleMessage(Message) method (requiring that you implement a subclass of Handler). 


When posting or sending to a Handler, you can either allow the item to be processed as soon as the message queue is ready to do so, or specify a delay before it gets processed or absolute time for it to be processed. The latter two allow you to implement timeouts, ticks, and other timing-based behavior. 


下面是一个简单的计数器程序,每隔一秒递增计数器 

 

代码 

main.xml 
-------- 
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical" android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent">  
  5.     <TextView android:id="@+id/counter" android:layout_width="fill_parent"  
  6.         android:layout_height="wrap_content" android:text="Count: 0" />  
  7.     <LinearLayout android:orientation="horizontal"  
  8.         android:layout_width="fill_parent" android:layout_height="wrap_content">  
  9.         <Button android:text="start" android:id="@+id/Button01"  
  10.             android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0"></Button>  
  11.         <Button android:text="stop" android:id="@+id/Button02"  
  12.             android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:enabled="false"></Button>  
  13.         <Button android:text="reset" android:id="@+id/Button03"  
  14.             android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0"></Button>  
  15.     </LinearLayout>  
  16. </LinearLayout>  


TestTimer.java 
-------------- 
Java代码  收藏代码
  1. package cn.yo2.aquarium.android.testtimer;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9. import android.widget.TextView;  
  10.   
  11. public class TestTimer extends Activity {  
  12.     private Button btnStart;  
  13.     private Button btnStop;  
  14.     private Button btnReset;  
  15.     private TextView tvCounter;  
  16.     private long count = 0;  
  17.     private boolean run = false;  
  18.   
  19.     private Handler handler = new Handler();  
  20.   
  21.     private Runnable task = new Runnable() {  
  22.   
  23.         public void run() {  
  24.             // TODO Auto-generated method stub  
  25.             if (run) {  
  26.                 handler.postDelayed(this1000);  
  27.                 count++;  
  28.             }  
  29.             tvCounter.setText("Count: " + count);  
  30.         }  
  31.     };  
  32.   
  33.     /** Called when the activity is first created. */  
  34.     @Override  
  35.     public void onCreate(Bundle savedInstanceState) {  
  36.         super.onCreate(savedInstanceState);  
  37.         setContentView(R.layout.main);  
  38.   
  39.         btnStart = (Button) findViewById(R.id.Button01);  
  40.         btnStop = (Button) findViewById(R.id.Button02);  
  41.         btnReset = (Button) findViewById(R.id.Button03);  
  42.         tvCounter = (TextView) findViewById(R.id.counter);  
  43.   
  44.         btnStart.setOnClickListener(new OnClickListener() {  
  45.   
  46.             public void onClick(View v) {  
  47.                 // TODO Auto-generated method stub  
  48.                 run = true;  
  49.                 updateButton();  
  50.                 handler.postDelayed(task, 1000);  
  51.             }  
  52.         });  
  53.   
  54.         btnStop.setOnClickListener(new OnClickListener() {  
  55.   
  56.             public void onClick(View v) {  
  57.                 // TODO Auto-generated method stub  
  58.                 run = false;  
  59.                 updateButton();  
  60.                 handler.post(task);  
  61.             }  
  62.         });  
  63.   
  64.         btnReset.setOnClickListener(new OnClickListener() {  
  65.   
  66.             public void onClick(View v) {  
  67.                 // TODO Auto-generated method stub  
  68.                 count = 0;  
  69.                 run = false;  
  70.                 updateButton();  
  71.                 handler.post(task);  
  72.             }  
  73.         });  
  74.     }  
  75.   
  76.     private void updateButton() {  
  77.         btnStart.setEnabled(!run);  
  78.         btnStop.setEnabled(run);  
  79.     }  
  80. }  
分享到:
评论

相关推荐

    Android Handler定时更新UI

    本文将深入探讨“Android Handler定时更新UI”的相关知识点,以及如何使用CounterDemo来实现这一功能。 首先,我们需要理解Android的线程模型。Android应用的主要执行线程被称为“主线程”或“UI线程”,它负责处理...

    利用Handler实时更新时间

    在Android开发中,实时更新界面元素常常涉及到线程间的通信,这里主要讲解如何利用Handler、Timer、TimerTask和Message这四个关键组件来实现这一功能。首先,我们需要理解这些组件的基本概念和作用。 **Handler** ...

    Android间隔1秒更新UI的4种方法

    在Android开发中,更新UI是常见的操作,尤其是在需要实时显示数据变化或动画效果时。本文将详细介绍四种在Android中实现1秒间隔更新UI的方法。这四种方法分别是:Handler、Runnable、TimerTask和CountDownTimer。每...

    【Android开发入门】Android线程之Handler

    本知识点将深入探讨Android中的Handler机制,它是Android异步处理和消息传递的核心工具,帮助开发者解决多线程环境下UI更新的问题。 一、Android线程基础 Android系统主要分为两个线程:主线程(UI线程)和工作线程...

    Android-UI-TimerTask.rar_android_android timetask_android ui

    "Android-UI-TimerTask.rar"这个压缩包文件显然关注的是如何在Android系统中利用`TimerTask`来实现定时更新UI的任务。`TimerTask`是Java语言中的一个类,它允许开发者在特定的时间间隔执行重复或一次性任务,这对于...

    模拟Android Handler机制Demo

    在Android应用开发中,尤其是涉及到UI更新时,Handler机制显得尤为重要。 Handler的主要作用是将一个在非主线程(通常为工作线程)中产生的任务发送到主线程,以便在主线程中执行。这是因为Android的UI操作必须在...

    android ui界面时间刷新

    本篇文章将深入探讨如何使用Handler机制来实现在Android UI界面上对系统时间的实时更新。 Handler是Android中处理消息和线程通信的核心组件,它允许开发者在不同的线程之间传递消息,执行异步操作,同时可以定时...

    android中的handler的使用方法

    在Android开发中,Handler是实现线程间通信的关键组件,尤其在处理UI更新时尤为重要。本文将深入探讨Android中的Handler机制及其使用方法。 首先,理解Handler的基本概念。Handler是Android消息处理系统的一部分,...

    Android的线程使用来更新UI

    为了解决这一问题,Android提供了多种机制来确保UI的更新既及时又不阻塞主线程,这些机制包括使用Thread、Handler、Looper、Timer和TimerTask等。 ### Thread 在Android中,`Thread` 是一个用于创建新线程的类。当...

    Android Handler Looper

    在Android应用开发中,Handler、Looper和Message是实现线程间通信的重要机制,尤其是在主线程与工作线程之间同步数据和执行UI更新时。Handler、Looper和Message三者结合使用,构建了一个消息处理系统,使得非UI线程...

    Android中handler的使用

    在Android开发中,Handler是处理多线程通信的关键机制,尤其在UI更新和异步任务中扮演着重要角色。本文将深入探讨Handler的工作原理、如何使用以及它在处理多线程中的应用。 Handler的主要功能是发送和处理消息,它...

    Android异步刷新UI多种实现方案

    虽然TimerTask不直接处理UI更新,但可以在任务执行完毕后通过Handler或者直接在主线程调用UI更新方法。这种方式适合实现定时刷新UI的效果,比如定时刷新数据。 对比这三种方法,Asynctask适用于简单快速的任务,且...

    Android Timer TimerTask Handler

    在Android开发中,有时我们需要定期执行某些任务,例如更新UI、执行网络请求或者进行定时提醒。在这种场景下,Android提供了多种机制来实现定时任务,包括`Timer`、`TimerTask`以及`Handler`。这三种工具可以协同...

    android计数器(Handler消息传递机制)

    通过这个简单的计数器应用,我们可以理解`Handler`如何协同`Looper`和`MessageQueue`工作,以及如何在Android中实现定时任务,特别是涉及到UI更新的操作。这种机制在更复杂的异步编程和事件驱动设计中也扮演着关键...

    Android中的Handler的具体用法

    - 更新UI:在后台线程中处理耗时操作后,通过`Handler`更新UI元素,避免了直接在非UI线程修改UI导致的ANR(Application Not Responding)错误。 - 延迟执行:`Handler`可以设置延迟发送消息,实现定时任务或延时...

    Android——显示时间和暂停时间(Handler类操作线程)

    `Handler`类是Android中处理消息和线程交互的核心工具,它允许我们在主线程中执行特定的操作,比如更新UI,而这些操作通常由工作线程触发。本篇文章将深入探讨如何利用`Handler`来实现显示和暂停时间的功能。 `...

    手写一套Java的Handler程序,深入理解Android消息机制

    这些消息可能包含了执行某些操作的指令,例如更新UI或者执行定时任务。 接下来,我们关注Looper。Looper是每个线程中的消息循环器,它会不断地从消息队列中取出Message并交给相应的Handler处理。在Android的主线程...

    android时间定时器,短信验证,定时刷新

    在Android开发中,时间定时器(Time Timer)和Handler机制是两种常见的用于实现定时任务的技术。这些技术在很多场景下都非常实用,例如短信验证、定时刷新界面数据等。接下来,我们将详细探讨这两种技术以及如何结合...

    Android Handler AsyncTask 异步加载

    - Handler适合处理周期性的、连续的任务,如定时刷新UI,或者需要在特定时刻执行的任务。 - AsyncTask更适合一次性、短时间的后台任务,它的使用更简单,但对多任务处理支持不足,且从Android P开始被官方建议避免...

Global site tag (gtag.js) - Google Analytics