- 浏览: 411637 次
文章分类
- 全部博客 (327)
- Android (114)
- Java (13)
- Java基础 (14)
- Glib (2)
- linux (15)
- extjs (5)
- eclipse (2)
- Asterisk (56)
- MYSQL (6)
- 数据库 (9)
- PHP (7)
- C# (18)
- 杂谈~~ (1)
- web开发前端 (3)
- 网络编程 (2)
- Opensips (2)
- voip (3)
- debian (7)
- openfire (15)
- wordpress (1)
- 版本控制 (1)
- Android 线程服务广播 (1)
- SRTP (2)
- 单片机及ARM等 (3)
- 基础知识 (5)
- asp.net (2)
- 单片机 (1)
- 设计模式及架构 (1)
- 安全 (1)
- Cubieboard 草莓树莓各类派 Android开发板 (1)
- J2EE (2)
- BootStrap (3)
- BootStrap web前端开发 (1)
- web前端开发 (4)
- object-c (1)
- openwrt (8)
- 智能家居 (4)
- Node.js (4)
最新评论
-
xiaoxiecomeon:
你这个程序一存在线程的时间片相互抢占的问题,运行时间长了很可能 ...
Runnable 和 Thread -
dotjar:
我觉得话应该这么说:引用TestThread tt = new ...
Runnable 和 Thread -
dagf113225:
调用TelephonyManager的隐藏API是先参考Fra ...
Android提高第十四篇之探秘TelephonyManager
在 Android 里定时更新 UI,通常使用的是 java.util.Timer, java.util.TimerTask, android.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 version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView android:id="@+id/counter" android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="Count: 0" />
- <LinearLayout android:orientation="horizontal"
- android:layout_width="fill_parent" android:layout_height="wrap_content">
- <Button android:text="start" android:id="@+id/Button01"
- android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0"></Button>
- <Button android:text="stop" android:id="@+id/Button02"
- android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:enabled="false"></Button>
- <Button android:text="reset" android:id="@+id/Button03"
- android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0"></Button>
- </LinearLayout>
- </LinearLayout>
TestTimer.java
--------------
- package cn.yo2.aquarium.android.testtimer;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.TextView;
- public class TestTimer extends Activity {
- private Button btnStart;
- private Button btnStop;
- private Button btnReset;
- private TextView tvCounter;
- private long count = 0;
- private boolean run = false;
- private Handler handler = new Handler();
- private Runnable task = new Runnable() {
- public void run() {
- // TODO Auto-generated method stub
- if (run) {
- handler.postDelayed(this, 1000);
- count++;
- }
- tvCounter.setText("Count: " + count);
- }
- };
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btnStart = (Button) findViewById(R.id.Button01);
- btnStop = (Button) findViewById(R.id.Button02);
- btnReset = (Button) findViewById(R.id.Button03);
- tvCounter = (TextView) findViewById(R.id.counter);
- btnStart.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- run = true;
- updateButton();
- handler.postDelayed(task, 1000);
- }
- });
- btnStop.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- run = false;
- updateButton();
- handler.post(task);
- }
- });
- btnReset.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- count = 0;
- run = false;
- updateButton();
- handler.post(task);
- }
- });
- }
- private void updateButton() {
- btnStart.setEnabled(!run);
- btnStop.setEnabled(run);
- }
- }
发表评论
-
直接拿来用!最火的Android开源项目整理
2015-09-16 10:13 601一、代码库 1、from 代码家 整理比较好的源 ... -
论J2EE程序员的武功修为(转)
2014-11-24 11:14 572经常会跟一些朋友讨论怎么样才能学好Java,学到什么程度才 ... -
tomcat登录的用户名和密码
2014-11-17 17:20 428在tomcat下的conf/tomcat-user.xml中 ... -
Maven 2.0:编译、测试、部署、运行
2014-11-17 15:07 907Maven 2.0:编译、测试、部署、运行 摘 ... -
探讨android更新UI的几种方法
2014-06-09 23:27 616今天讲的内容非常简单,只是讲讲有关于android界面更新的 ... -
Android 滑动切换页面 以及屏幕手势
2014-05-08 17:49 526手机进入智能机时代,触摸屏也已成为主流之势,原来的手机按键也 ... -
android 用Achartengine 作图
2014-05-08 16:55 760Achartengine 是google的一 ... -
Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
2014-05-08 16:28 769Animation的4个基本动画效果 What is An ... -
java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.Vie
2014-05-06 14:43 2933Android错误:Caused by: java.lang ... -
Android Socket通信如何设置超时时间
2014-05-06 14:14 1079其实关于这个问题可能用到的人不会很多,不过我在这里还是说说。 ... -
【转】Android本地语音识别引擎PocketSphinx-语言建模
2014-02-13 10:35 1829Android本地语音识别引擎PocketSphinx- ... -
关于build.prop原始Dalvik虚拟机设定与调整
2013-09-05 10:40 1260原厂S3 台版 1GB Ramsystem/build.pro ... -
Android中Service与IntentService的使用比较
2013-09-04 15:24 1202该博客来自网络——— ... -
android 应用程序Activity之间数据传递与共享的几种途径
2013-08-01 17:24 9061.基于消息的通信机制 Intent ---boud ... -
android数据通信方式
2013-08-01 17:15 911http://www.itkee.com/develope ... -
“android.intent.category.DEFAULT”的目的是什么?
2013-07-31 16:43 5381、要弄清楚这个问题,首先需要弄明白什么是implicit( ... -
集成拨号盘,2句话的事情
2013-07-30 15:45 602<intent-filter> < ... -
Android TabHost动态加载内容总结
2013-07-25 17:49 954前面用继承TabActivity的方法很好的完成了,TabHo ... -
[Android实例] android json
2013-07-17 15:20 654import java.io.ByteArrayOutput ... -
android json解析及简单例子
2013-07-17 15:19 932JSON的定义: 一种轻量级的数据交换 ...
相关推荐
本文将深入探讨“Android Handler定时更新UI”的相关知识点,以及如何使用CounterDemo来实现这一功能。 首先,我们需要理解Android的线程模型。Android应用的主要执行线程被称为“主线程”或“UI线程”,它负责处理...
在Android开发中,实时更新界面元素常常涉及到线程间的通信,这里主要讲解如何利用Handler、Timer、TimerTask和Message这四个关键组件来实现这一功能。首先,我们需要理解这些组件的基本概念和作用。 **Handler** ...
在Android开发中,更新UI是常见的操作,尤其是在需要实时显示数据变化或动画效果时。本文将详细介绍四种在Android中实现1秒间隔更新UI的方法。这四种方法分别是:Handler、Runnable、TimerTask和CountDownTimer。每...
本知识点将深入探讨Android中的Handler机制,它是Android异步处理和消息传递的核心工具,帮助开发者解决多线程环境下UI更新的问题。 一、Android线程基础 Android系统主要分为两个线程:主线程(UI线程)和工作线程...
"Android-UI-TimerTask.rar"这个压缩包文件显然关注的是如何在Android系统中利用`TimerTask`来实现定时更新UI的任务。`TimerTask`是Java语言中的一个类,它允许开发者在特定的时间间隔执行重复或一次性任务,这对于...
在Android应用开发中,尤其是涉及到UI更新时,Handler机制显得尤为重要。 Handler的主要作用是将一个在非主线程(通常为工作线程)中产生的任务发送到主线程,以便在主线程中执行。这是因为Android的UI操作必须在...
本篇文章将深入探讨如何使用Handler机制来实现在Android UI界面上对系统时间的实时更新。 Handler是Android中处理消息和线程通信的核心组件,它允许开发者在不同的线程之间传递消息,执行异步操作,同时可以定时...
在Android开发中,Handler是实现线程间通信的关键组件,尤其在处理UI更新时尤为重要。本文将深入探讨Android中的Handler机制及其使用方法。 首先,理解Handler的基本概念。Handler是Android消息处理系统的一部分,...
为了解决这一问题,Android提供了多种机制来确保UI的更新既及时又不阻塞主线程,这些机制包括使用Thread、Handler、Looper、Timer和TimerTask等。 ### Thread 在Android中,`Thread` 是一个用于创建新线程的类。当...
在Android应用开发中,Handler、Looper和Message是实现线程间通信的重要机制,尤其是在主线程与工作线程之间同步数据和执行UI更新时。Handler、Looper和Message三者结合使用,构建了一个消息处理系统,使得非UI线程...
在Android开发中,Handler是处理多线程通信的关键机制,尤其在UI更新和异步任务中扮演着重要角色。本文将深入探讨Handler的工作原理、如何使用以及它在处理多线程中的应用。 Handler的主要功能是发送和处理消息,它...
虽然TimerTask不直接处理UI更新,但可以在任务执行完毕后通过Handler或者直接在主线程调用UI更新方法。这种方式适合实现定时刷新UI的效果,比如定时刷新数据。 对比这三种方法,Asynctask适用于简单快速的任务,且...
在Android开发中,有时我们需要定期执行某些任务,例如更新UI、执行网络请求或者进行定时提醒。在这种场景下,Android提供了多种机制来实现定时任务,包括`Timer`、`TimerTask`以及`Handler`。这三种工具可以协同...
通过这个简单的计数器应用,我们可以理解`Handler`如何协同`Looper`和`MessageQueue`工作,以及如何在Android中实现定时任务,特别是涉及到UI更新的操作。这种机制在更复杂的异步编程和事件驱动设计中也扮演着关键...
- 更新UI:在后台线程中处理耗时操作后,通过`Handler`更新UI元素,避免了直接在非UI线程修改UI导致的ANR(Application Not Responding)错误。 - 延迟执行:`Handler`可以设置延迟发送消息,实现定时任务或延时...
`Handler`类是Android中处理消息和线程交互的核心工具,它允许我们在主线程中执行特定的操作,比如更新UI,而这些操作通常由工作线程触发。本篇文章将深入探讨如何利用`Handler`来实现显示和暂停时间的功能。 `...
这些消息可能包含了执行某些操作的指令,例如更新UI或者执行定时任务。 接下来,我们关注Looper。Looper是每个线程中的消息循环器,它会不断地从消息队列中取出Message并交给相应的Handler处理。在Android的主线程...
在Android开发中,时间定时器(Time Timer)和Handler机制是两种常见的用于实现定时任务的技术。这些技术在很多场景下都非常实用,例如短信验证、定时刷新界面数据等。接下来,我们将详细探讨这两种技术以及如何结合...
- Handler适合处理周期性的、连续的任务,如定时刷新UI,或者需要在特定时刻执行的任务。 - AsyncTask更适合一次性、短时间的后台任务,它的使用更简单,但对多任务处理支持不足,且从Android P开始被官方建议避免...