Android Handler定时更新UI

使用Handler定时更新Android UI编程 为了实现定时更新UI的功能,可以使用Android的Handler机制。通过以上步骤,就可以在Android应用程序中使用Handler定时更新UI了。在上面的代码中,通过调用mHandler的postDelayed方法来启动定时更新任务,第一个参数是需要执行的Runnable对象,第二个参数是延迟的时间(单位为毫秒)。同时,在Activity的onPause方法中使用mHandler的removeCallbacks方法停止定时更新任务,以防止在Activity不可见时继续更新UI。 阅读详情
  Handler在android里负责发送和处理消息。它的主要用途有:
  1)按计划发送消息或执行某个Runnanble(使用POST方法);
  2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)
   默认情况下,Handler接受的是当前线程下的消息循环实例(使用Handler(Looper looper)、Handler(Looper looper, Handler.Callback callback)可以指定线程),同时一个消息队列可以被当前线程中的多个对象进行分发、处理(在UI线程中,系统已经有一个Activity来处理了,你可以再起若干个Handler来处理)。在实例化Handler的时候,Looper可以是任意线程的,只要有Handler的指针,任何线程也都可以sendMessage。Handler对于Message的处理不是并发的。一个Looper 只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的(handleMessage()方法里不应该有耗时操作,可以将耗时操作放在其他线程执行,操作完后发送Message(通过sendMessges方法),然后由handleMessage()更新UI)。
参考 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. 


下面是个计数器演示代码


Java 代码
package artray.cjp.counterdemo;

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 CounterDemoActivity 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中利用Handler和Timer实时更新时间的实现方法 TimerTask是一个抽象类,为了使用TimerTask,你需要创建一个TimerTask的子类,并且重写它的run()方法,在该方法中编写你希望定时执行的代码。一个简单的TimerTask使用示例如下:@OverrideSystem.out.println("定时任务执行了:" + System.currentTimeMillis());之后,你可以创建Timer实例,并且使用它的schedule系列方法来调度你的任务。 阅读详情

相关推荐

Android Handler定时更新UI

Android Handler定时更新UI

Android开发:编程实现界面定时刷新

使用Handler机制实现界面定时刷新功能。

保温杯拖把风扇的博客 2913

深入解析路科验证V0实验lab1:SV接口与时钟块实战

本文深入解析了路科验证V0实验Lab1的核心内容,重点阐述了SystemVerilog接口与时钟块在验证环境搭建中的关键作用。通过拆解router_io接口设计、时钟块同步机制及程序块封装,详细讲解了如何构建稳定可靠的验证通信基础,并提供了复位时序分析与常见调试技巧,为后续复杂验证打下坚实基础。

peach的博客 430

android定时多次刷新,Android中常见的几种定时刷新方式

在Android中常见的几种刷新方式有 Timer,Alarm和handler。在widgetapp更新中,alarm用的比较多,有人讲用alarm比较省电。但笔者使用后发现用alarm有时候反而会使系统反应变慢了。更好的方法推荐使用handler。第一种:TimerTimer这种方式最为常见,起个定时刷新的任务,不用的时候cancel掉,置为空即可。示例代码:Timer timer = new ...

weixin_39901439的博客 1410

Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)

Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 目录导航Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建前言1.安装前的准备工作2.安装交叉编译器 前言 这篇文章,主要是基于 Ubuntu19.10版本而写,写此文的初衷,是为了自己使用,因为最近正在以Tiny6410板子做实训,所以也是初学者一枚,只能保证我遇上的问题统统能够解决掉,至于一些没遇上的,欢迎各位看客给我留言,大家一起讨论,一起解决。 注:本文会持续更新 1.安装前的准备工作 环境要求 Linux系统:U

繁臻的小窝 4894

C300 | 5680t | 新格林| AN5516 | 远程ONU升级指导

ONU的远程管理升级 1、ZTE C300 OLT : 1.1 环境拓扑: PC1(filezilla server)------(uplink_default-vlanID)OLT---------ONU | | mng1 1.2 配置部署: 1):PC1(filezilla server): IP:192.168.88.252 255.255.255.0 配置FTP-Server的用户名:gp...

Shelly的博客 3770

Android 定时器的实现和停止

一、采用Handle与线程的sleep(long)方法 1. 定义一个Handler类,用于处理接受到的Message Handler handler = new Handler() { public void handleMessage(Message msg) { // 要做的事情 super.handleMessage(msg); } }...

m0_37724690的博客 3984

QGIS三维地形可视化实战:从DEM数据到炫酷3D场景(附Qgis2threejs插件配置)

本文详细介绍了如何利用QGIS和Qgis2threejs插件,将DEM数据转化为交互式三维地形场景的完整工作流。核心内容包括DEM数据准备、坐标系选择(重点对比WGS 84与UTM的差异及影响)、插件核心参数配置、卫星影像与等高线叠加等进阶技巧,并提供了成果导出与常见问题解决方案,帮助用户高效创建可用于网页展示的炫酷3D可视化成果。

mqtt6iot的博客 875

利用Handler定时更新Android UI

在 Android 里定时更新 UI,通常使用的是 java.util.Timer, java.util.TimerTask, android.os.Handler 组合,这里有相关的讨论。但实际上 Handler 自身已经提供了定时的功能。  参考 android.os.Handler 的文档  引用 There are two main uses for a Hand

记事本 1326

Altium Designer实战:手把手教你设计智能车竞赛疯狂电路组赛道(附封装库)

本文详细介绍了使用Altium Designer软件进行智能车竞赛“疯狂电路”组赛道设计的全流程实战指南。从理解比赛规则、搭建设计环境、创建专用元器件封装库,到电路布局、路径规划及设计输出验证,手把手教你高效完成符合计分标准的赛道图纸设计,并附上实用的封装库管理方法。

alice7model的博客 1320

22、用户界面流程(UI Flow)全解析

本文全面解析了用户界面流程(UI Flow)的概念、创建步骤及其在系统设计中的应用。通过示例和操作步骤,详细介绍了如何确定屏幕范围、识别屏幕、创建过渡和标记触发器,并阐述了UI Flow在导航识别、验证、可用性优化、测试用例开发和需求推导中的重要作用。文章还结合问答系统案例,展示了UI Flow的实际应用价值,帮助读者深入理解并有效运用这一工具提升系统用户体验。

rice5的博客 153

android handler定时更新ui,Android笔记——Handler更新UI示例

public class MainActivity extends ActionBarActivity {private TextView textView;private int i=0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setConten...

weixin_28727321的博客 363

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

Robot_PLC_HMI_Automation 6514

android handler定时更新ui,android中利用Handler来更新UI

刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题new Thread( new Runnable() {public void run() {myView.invalidate();}}).start();然而发现这样是不行的,因为它违背了单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。查阅了文档和apidemo后,发觉...

weixin_28909503的博客 431

中文核心:swin transformer 农作物病虫害识别 完整代码数据

中文核心:swin transformer 农作物病虫害识别

939

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

android handler定时更新ui,android开发教程之handler异步更新ui

packagecom.Test.androidtest;importandroid.app.Activity;importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.os.Bundle;imp...

weixin_28846179的博客 146

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

使用Handler定时更新UI

在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

wtao158的专栏 3860

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

android更新UI(界面)的方法;android刷新界面数据的方法;android定时器更新界面

android更新UI(界面)的方法;android刷新界面数据的方法;android定时器更新界面;android显示当前时间 一、定时器更新UI的两种方法 1、使用Timer的方式 private Timer timer=new Timer(); timer.schedule(new TimerTask() { @Override public void run() { times.setText(CurrentTime()); } },0,500); //延迟500毫秒后,执行一次task ...

jppipai的博客 1万+

android textview 动画,如何反复更新android TextView以模拟动画

您可以根据需要使用Handler和Runnable.我正在共享一个经过编辑的代码,目前我正使用这些代码,就像您的目的一样.您可以直接复制类和布局,然后尝试.主要思想是将Handler及其post和postDelayed方法与Runnable一起使用.按下按钮时,它每隔3秒就会开始更改文本.如果再次按下该按钮,它将自行重置.尝试这段代码,尝试理解它.处理程序可用于多种用途来更改UI.进一步了解它.M...

weixin_39898550的博客 415

运用Handler与线程的sleep(long)的安卓定时器

继承:    达内java学习笔记    4  父类(SuperClass)和 子类(SonClass)。  父类的非私有化属性和方法可以默认继承到子类。 Class Son extends Father{ }  而如果父类中的私有方法被子类调用的话,则编译报错。   父类的构造方法子类不可以继承,更不存在覆盖的问题。(非构造方法可以) 如果

u012515510的专栏 2721

android studio 定时器,Android定时器和Handler用法实例分析

本文实例讲述了Android定时器和Handler用法。分享给大家供大家参考。具体分析如下:一、环境:主机:WIN8开发环境:Android Studio二、定时器使用示例:初始化://定时器private Timer Timer_Work = new Timer();//工作间隔,单位:msprivate final int INTERVAL_WORK = 5000;创建定时器线程:/*** 构...

weixin_42549154的博客 1260

Android之Handler用法总结

方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题    new Thread( new Runnable() { public void run() { myView.invalidate();

lhzjj的专栏 3774

android studio定时器代码简析

本文结合源代码详细分析一下基于message的定时器,在编写物联网应用APP的时候,获取传感器数据会用到这个功能。

ieeee.blog.youkuaiyun.com 3131

Activity利用Handler与Thread进行通讯,写了一个简单Demo

最近写了一个列子,想跟大家一起分享.  用android.os.Handler、java.lang.Thread以及android.os.Message这三个类的整合应用。  这里只有Activity类代码.其他的一些布局文件,我想看到以下代码,你们因该明白.  Activity代码   import java.text.SimpleDateFormat;

Adrian 博客 899
上一篇: 在Android源码里编译apk
下一篇: Android Light Sensor与Temperature Sensor开发
Jumping_Android
博客等级 码龄15年 36粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值