Handle-postDelayed 延迟操作
今天在工作的时候,遇到了一个方法,是关于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 延迟操作的更多相关文章
- for循环+setTimeout的延迟操作
例子: for (var i = 0; i < 5; i++) { setTimeout(function () { console.log(i); }, 100) } 上述代码,输出结果显而易 ...
- [从源码学设计]蚂蚁金服SOFARegistry之延迟操作
[从源码学设计]蚂蚁金服SOFARegistry之延迟操作 0x00 摘要 SOFARegistry 是蚂蚁金服开源的一个生产级.高时效.高可用的服务注册中心. 本系列文章重点在于分析设计和架构,即利 ...
- 数据结构--线段树--lazy延迟操作
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 53749 ...
- new Handler().postDelayed() 延迟intent跳转
原文地址http://blog.csdn.net/x605940745/article/details/19401549 new Handler().postDelayed(new Runnable( ...
- iOS 中 延迟操作四种方式
本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.perf ...
- Java_延迟操作
1. 用Thread就不会iu无法终止 new Thread(new Runnable() { public void run() { ...
- Kafka技术内幕 读书笔记之(五) 协调者——延迟的加入组操作
协调者处理不同消费者的“加入组请求”,由于不能立即返回“加入组响应”给每个消费者,它会创建一个“延迟操作”,表示协调者会延迟发送“加入组响应”给消费者 . 但协调者不会为每个消费者的 “加入组请求 ...
- 【Win 10应用开发】延迟共享
延迟共享是啥呢,这么说吧,就是在应用程序打开共享面板选择共享目标时,不会设置要共享的数据,而是等到共享目标请求数据时,才会发送数据,而且,延迟操作可以在后台进行. 这样说似乎过于抽象,最好的诠释方法, ...
- as3延迟处理
查找关键字“flashplayer 弹性跑道” 每当一帧即将走完,FlashPlayer就要做些总结性工作(一次性地汇总变化),把这一帧当中发生的变化拿出来展示(渲染)一下. 如果它处理的事情少,工作 ...
随机推荐
- []HAOI2008] 硬币购物 解题报告 ( 完全背包+容斥原理)
题目链接:https://www.luogu.org/problemnew/show/P1450 题目描述: 题解: 如果去掉限制的话,这就是一个完全背包. 我们可以考虑先去掉限制,把这个完全背包做出 ...
- mysql InnoDB引擎 共享表空间和独立表空间(转载)
PS:innodb这种引擎,与MYISAM引擎的区别很大.特别是它的数据存储格式等.对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间. 1.什么是共享表空间和独占表空 ...
- [ZJOI2012]旅游 对偶图 树的直径
Code: // luogu-judger-enable-o2 #include<cstdio> #include<iostream> #include<algorith ...
- java 线程传参 方式
第一类:主动向线程传参 public class ThreadTest extends Thread { public ThreadTest() { } /** * 第一种通过构造方法来传递参数 ...
- string.split 应用
采用string.split将字符串依据分隔符,转换成字符串数组,生成的字符串数组中会包含空数组元素,需要通过StringSplitOptions.RemoveEmptyEntries参数选项去除. ...
- Spring Cloud学习笔记【四】断路器Hystrix
雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因 “服务提供者” 的不可用导致 “服务消 ...
- Android之Handler源代码深入解析
闲着没事.就来看看源代码,看看源代码的各种原理,会用仅仅是简单的,知道为什么才是最牛逼的. Handler源代码分析那,从使用的步骤来边用边分析: 1.创建一个Handler对象:new Handle ...
- [DLX精确覆盖+打表] hdu 2518 Dominoes
题意: 就是给12种图形,旋转,翻折.有多少种方法构成n*m=60的矩形 思路: 裸的精确覆盖.就是建图麻烦 个人太挫,直接手写每一个图形的各种形态 须要注意的是最后的答案须要除以4 代码: #inc ...
- 《Java设计模式》之装饰模式
装饰模式(Decorator) 1. 装饰模式(Decorator)的定义:又名包装(Wrapper)模式.装饰模式以对client透明的方式扩展对象的功能,是继承关系的一个替代方案. 2. ...
- 理解FPGA中的RAM、ROM和CAM;ROM、RAM、DRAM、SRAM、FLASH
目前大多数FPGA都有内嵌的块RAM(Block RAM),可以将其灵活地配置成单端口RAM(DPRAM,Single Port RAM).双端口RAM(DPRAM,Double Ports RAM) ...