- 浏览: 227047 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (109)
- IOS (15)
- 设计模式 (7)
- XML (1)
- Android (31)
- 面试经 (1)
- J2EE (3)
- android md5 加密 (2)
- android imagebutton文字实现 (1)
- 反射机制 (2)
- 基础知识 (1)
- linux (3)
- java (4)
- java基础 (2)
- 文章 (1)
- myeclipse tomcat (1)
- Hadoop (1)
- ubuntu (2)
- redmine (1)
- python (4)
- jmeter (10)
- xamarin (1)
- selenium (9)
- nexus (1)
- appium (3)
- BDD (1)
- apache2 (1)
- zabbix (2)
- python,webdriver (1)
- ajax (1)
- jmeter,正则表达式,关联 (2)
- 性能测试工具 (1)
- Django (0)
- Intelij (1)
- RAP (0)
- 性能测试 (0)
最新评论
在 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代码
<?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>
<?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
--------------
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.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代码
<?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>
<?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
--------------
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);
}
}
发表评论
-
Starting emulator for AVD 'android' PANIC: Could not open: android
2013-05-21 13:29 1929我的电脑-->属性-->高级-->环境变量。 ... -
eclipse4.2版本下面安装ADT,安装已经完成了,但没有ADT的那个图标显示
2013-05-21 13:26 944如果安装过程没错,直接在Eclipse ->window ... -
Android 打包签名 从生成keystore到完成签名 -
2012-10-30 00:49 959首先,我们需要一个keystore,当然已经有了的话就不用这一 ... -
解决更新并使用最新ADT20不能创建android项目问题
2012-10-18 22:20 1057不知道谷歌又怎么了,每次更新ADT插件就会出现各种各样的问题, ... -
ORACLE分页查询SQL语法
2012-10-18 22:20 1212oracle数据库 --1:无ORDER BY ... -
Activity生命周期
2012-10-18 22:20 1142博客分类: Android 新的activit ... -
布局
2012-10-18 22:21 1097padding:描述控件里面的内容与控件的关机,内边距;有四个 ... -
常用控件:TextView EditView
2012-10-13 13:32 1189TextView 布局: Xml代 ... -
按钮控件
2012-10-13 13:32 1184监听器: 监听器 方法 内容 OnClickList ... -
菜单
2012-10-13 13:31 1119menu键触发 三种形式:普通的option menu;上下 ... -
HttpClient
2012-10-13 13:31 1136在Android开发中我们经常会用到网络连接功能与服务器进行数 ... -
Android 的一些提示框
2012-10-08 00:57 7921.在测试时,如何实现一个提示 可以使用 Toast.ma ... -
Intent的几种用法
2012-10-08 00:57 936下面列出几种Intent的用法 1. 启动一个新的Activ ... -
Android改变窗口标题栏的布局
2012-10-10 23:26 930一、 重点 一般应用的Title都是建立应用时在Androi ... -
android中如何自定义attributes
2012-10-10 23:26 992写程序中可能需要用到一些自定义的view控件,这样就需要增加一 ... -
android manifest.xml中元素含义
2012-10-08 00:56 845android:allowTaskReparenting 是 ... -
十二个android编程技巧
2012-10-10 23:26 10081.让一个图片透明: Java代码 1. Bitm ... -
Android Phone类分析
2012-10-10 23:26 1232AccelerometerListener:感应 ... -
android控件设置居中方式
2012-10-07 00:16 8468垂直居中 android:layout_centerVert ... -
android TextView属性大全
2012-10-10 23:28 986android:autoLink设置是否当 ...
相关推荐
本文将深入探讨“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开始被官方建议避免...