今天在工作的时候,遇到了一个方法,是关于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. Kali linux 2016.2(Rolling)中metasploit的主机探测

    不多说,直接上干货! 1.活跃主机扫描 root@kali:~# ping -c 202.193.58.13 PING () bytes of data. bytes ttl= time=25.4 m ...

  2. 实时监控Cat之旅~对请求是否正常结束做监控(分布式的消息树)

    对基于请求的分布式消息树的分析 在MVC时有过滤器System.Web.Mvc.ActionFilterAttribute,它可以对action执行的整个过程进行拦截,执行前与执行后我们可以注入自己的 ...

  3. java9新特性-17-智能Java编译工具

    1.官方Feature 139: Enhance javac to Improve Build Speed. 199: Smart Java Compilation, Phase Two 2.使用说明 ...

  4. python3.x 学习笔记1(基础知识)

    1.python模块: 标准库和第三方库,第三方库需要下载安装 2.模块sys: 命令 功能 sys.stdin 标准输入流sys.stdout  标准输出流sys.stderr           ...

  5. Android RecyclerView 水平滚动+自动循环轮播

    主要处理的地方: 1.RecyclerView中Adapter的item个人可以无限轮询. 2.RecyclerView自动滑动 3.手指按下时滑动停止,手指抬起后继续自动滑动 public clas ...

  6. caffe(9) caffe例子

    为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. 注意: ...

  7. [POI2015]WIL-Wilcze doły(单调队列)

    题意 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. (1<=d<=n< ...

  8. nginx和apache

    apache所占用的内存资源较多,并且处理较慢 apache的全部模块都支持动静态编译 apache对Fcgi的支持不好 apache不支持epoll apache相对于nginx是一个庞然大物 ng ...

  9. Launcher3实现壁纸居中

    Launcher3的wallpaper显示是动态的,与Launcher预置桌面数目有关,让壁纸居中,仅仅能确保第一次开机时壁纸居中,后面用户改动桌面数目后,就无法达到了.怎样要在默认桌面数目配置时居中 ...

  10. js插件---图片懒加载lazyload

    js插件---图片懒加载lazyload 一.总结 一句话总结:使用异常简单,src里面放加载的图片,data-original里面放原图片,不懂的位置去官网或者github找API就好. 1.laz ...