今天在工作的时候,遇到了一个方法,是关于Handle来实现延时操作的,自己写了一个小demo,学习总结如下

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" > <RelativeLayout
android:id="@+id/abc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="30dp" > <RelativeLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp" > <TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/select"
android:text="time"
android:textColor="#ffffff"
android:textSize="30dp" /> <TextView
android:id="@+id/tv_click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/select"
android:text="click"
android:textColor="#ffffff"
android:textSize="30dp" />
</RelativeLayout> <TextView
android:id="@+id/tv_run"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll"
android:layout_centerHorizontal="true"
android:background="@drawable/select"
android:padding="20dp"
android:text="wait...."
android:textColor="#ffffff"
android:textSize="30dp" /> <Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_run"
android:src="@drawable/select"
android:text="start"
android:textColor="#ff0000" /> <Button
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_run"
android:layout_centerHorizontal="true"
android:src="@drawable/select"
android:text="stop"
android:textColor="#ff0000" /> <Button
android:id="@+id/bt3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/tv_run"
android:src="@drawable/select"
android:text="clear"
android:textColor="#ff0000" />
</RelativeLayout> </LinearLayout>

java如下

package com.example.alert;

import android.R.integer;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message; import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; public class HeadSetActivity extends Activity {
private TextView tv_time;
private TextView tv_click;
private TextView tv_run;
private Button button1;
private Button button2;
private Button button3;
private int time = 0;
private boolean time_begin = true;
private int click = 0;
//创建消息队列
private Handler uiHandle = new Handler(){
public void handleMessage(Message msg) {
switch(msg.what){
//实现计时器功能
case 1:
time++;
tv_time.setText("time:"+time);
uiHandle.sendEmptyMessageDelayed(1, 1000);
break;
default: break;
}
}
};
//开启一个线程
private Runnable runnable = new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
tv_run.setText("runnable is start|time="+time);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_time = (TextView)findViewById(R.id.tv_time);
tv_click = (TextView)findViewById(R.id.tv_click);
tv_run = (TextView)findViewById(R.id.tv_run);
button1 = (Button) findViewById(R.id.bt1);
button2 = (Button) findViewById(R.id.bt2);
button3 = (Button) findViewById(R.id.bt3);
//启动计时器以及runnable延时操作
button1.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//启动activity1
if (time_begin) {
uiHandle.sendEmptyMessageDelayed(1, 1000);
tv_run.setText("runnable wait begin|time="+time);
time_begin = false;
}
click++;
tv_click.setText("click:"+click); uiHandle.postDelayed(runnable,4000);
} });
//移除runnable延时操作
button2.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
uiHandle.removeCallbacks(runnable);
tv_run.setText("runnable is clear|time ="+time); }
});
//清除消息队列的所有操作
button3.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
uiHandle.removeMessages(1);
tv_click.setText("click");
tv_run.setText("wait...");
tv_time.setText("time");
uiHandle.removeCallbacks(runnable);
time_begin = true;
time = 0;
click = 0;
}
});
} }

我们看下如下的演示结果

从上面的演示结果我们可以得出关于postDelayed 的知识点总结

1.这个方法是用来延时执行一个动作的

2.多次执行这个动作,并不会移除之前仍然处于延时等待状态的动作

3.如果想要结束处于等待执行中的动作,我们可以主动调用

uiHandle.removeCallbacks(runnable);

Handle-postDelayed 延迟操作的更多相关文章

  1. for循环+setTimeout的延迟操作

    例子: for (var i = 0; i < 5; i++) { setTimeout(function () { console.log(i); }, 100) } 上述代码,输出结果显而易 ...

  2. [从源码学设计]蚂蚁金服SOFARegistry之延迟操作

    [从源码学设计]蚂蚁金服SOFARegistry之延迟操作 0x00 摘要 SOFARegistry 是蚂蚁金服开源的一个生产级.高时效.高可用的服务注册中心. 本系列文章重点在于分析设计和架构,即利 ...

  3. 数据结构--线段树--lazy延迟操作

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 53749   ...

  4. new Handler().postDelayed() 延迟intent跳转

    原文地址http://blog.csdn.net/x605940745/article/details/19401549 new Handler().postDelayed(new Runnable( ...

  5. iOS 中 延迟操作四种方式

    本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.perf ...

  6. Java_延迟操作

    1. 用Thread就不会iu无法终止     new Thread(new Runnable() {               public void run() {                ...

  7. Kafka技术内幕 读书笔记之(五) 协调者——延迟的加入组操作

      协调者处理不同消费者的“加入组请求”,由于不能立即返回“加入组响应”给每个消费者,它会创建一个“延迟操作”,表示协调者会延迟发送“加入组响应”给消费者 . 但协调者不会为每个消费者的 “加入组请求 ...

  8. 【Win 10应用开发】延迟共享

    延迟共享是啥呢,这么说吧,就是在应用程序打开共享面板选择共享目标时,不会设置要共享的数据,而是等到共享目标请求数据时,才会发送数据,而且,延迟操作可以在后台进行. 这样说似乎过于抽象,最好的诠释方法, ...

  9. as3延迟处理

    查找关键字“flashplayer 弹性跑道” 每当一帧即将走完,FlashPlayer就要做些总结性工作(一次性地汇总变化),把这一帧当中发生的变化拿出来展示(渲染)一下. 如果它处理的事情少,工作 ...

随机推荐

  1. js 实现 水仙花数

    水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) <!DOCTYPE html><html ...

  2. 防雪崩利器:熔断器 Hystrix 的原理与使用--转

    原文地址:https://segmentfault.com/a/1190000005988895 前言 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. ...

  3. ajax无刷新翻页后,jquery失效问题的解决

    例如 $(".entry-title a").click(function () {   只对第一页有效, 修改为 $(document).on('click', ".e ...

  4. CUDA学习笔记(四)

    昨天一直在写ben的作业.总结一下周一的cuda情况. cuda程序需要用到一些设置的参数,如argv[],另外cuda读入文件特别苛刻,只能采用C的方式,而且对w+,r的使用只有试通才行. 卧底天外 ...

  5. 虚拟机: 虚拟机win7的激活方式(底层操作系统 为 win10) ===用windows loader

    激活方式:  需要用windows loader

  6. windows平台Perl模块离线安装

    工具: Perl windows工具:ActivePerl-5.24.0.2400-MSWin32-x86-64int-300560.exe Dmake工具:https://cpan.metacpan ...

  7. CF546E Soldier and Traveling(网络流,最大流)

    CF546E Soldier and Traveling 题目描述 In the country there are \(n\) cities and \(m\) bidirectional road ...

  8. ARM官方《CMSIS-RTOS教程》之线程Threads

    创建线程Creating Threads 一旦RTOS开始运行,就会有很多系统调用来管理和控制活跃的线程.默认情况下,main()函数自动被创建为第一个可运行的线程.在第一个例子里我们使用main() ...

  9. 洛谷 P1056 排座椅

    P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上 ...

  10. 【Oracle错误集锦】:ORA-00119 &amp; ORA-00132

    有时候老天就是爱和你开玩笑,昨天好不easy配置好Oracle.可以用PL/SQL正常登录使用,今天突然就不行了.而且错误十分诡异,没有提示什么错误代码.输入usernamepassword,点击登录 ...