点击button暂停

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.button)
Button button; @BindView(R.id.first_textview)
TextView textView; Handler mHandler; volatile boolean flag=true;
Object object=new Object();
MThread mThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); ButterKnife.bind(this); textView.setText(String.valueOf()); mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
textView.setText(String.valueOf(msg.what));
}
}; mThread=new MThread();
mThread.start(); button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!mThread.isAlive()){
mThread=new MThread();
mThread.start();
return;
}
if(flag==true){
flag=!flag;
}
else{
synchronized (object){
flag=!flag;
object.notify();
}
} }
});
} public class MThread extends Thread{
@Override
public void run() {
System.out.println("enter thread");
for(int i=;i>=;i--){
if(flag==false){
synchronized (object) {
try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(i);
mHandler.sendEmptyMessage(i);
try {
sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
} }
} }

两个handler:

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.button)
Button button; @BindView(R.id.textview)
TextView textView; Handler mFirstHandler;
Handler mSecondHandler; volatile boolean flag = true;
Object object = new Object();
SecondThread mThread;
FirstThread mFirstThread; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity); ButterKnife.bind(this); textView.setText(String.valueOf()); mSecondHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
textView.setText(String.valueOf(msg.what));
return true;
}
}); mThread = new SecondThread();
mThread.start(); mFirstThread = new FirstThread();
mFirstThread.start();
} public class SecondThread extends Thread {
@Override
public void run() {
Looper.prepare();
Looper.loop();
System.out.println("*****************");
mFirstHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
mSecondHandler.sendEmptyMessage(msg.what);
}
};
}
} public class FirstThread extends Thread {
@Override
public void run() {
System.out.println("enter first thread"); for (int i = ; i >= ; i--) {
Message message = Message.obtain();
message.what = i;
try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
mFirstHandler.sendMessage(message);
}
}
} }

使用ThreadHandler

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.button)
Button button; @BindView(R.id.textview)
TextView textView; Handler mFirstHandler;
Handler mSecondHandler; Thread t=new FirstThread(); volatile boolean flag = true;
Object object = new Object();
HandlerThread handlerThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity); ButterKnife.bind(this); textView.setText(String.valueOf(1)); mSecondHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
textView.setText(String.valueOf(msg.what));
return true;
}
}); handlerThread=new HandlerThread("1");
handlerThread.start();
mFirstHandler=new Handler(handlerThread.getLooper()){
@Override
public void handleMessage(Message msg) {
mSecondHandler.sendEmptyMessage(msg.what);
}
}; t.start();
} public class FirstThread extends Thread {
@Override
public void run() {
System.out.println("enter first thread"); for (int i = 20; i >= 0; i--) {
Message message = Message.obtain();
message.what = i;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
mFirstHandler.sendMessage(message);
}
}
} }

使用handler倒计时的更多相关文章

  1. Android中使用Handler以及CountDownTimer实现包含倒计时的闪屏页面

    上一篇博文<Android中Handler使用浅析>通过实现倒计时闪屏页面的制作引出了Handler的使用方法以及实现原理,博文末尾也提到了实现过程中的Bug,有兴趣的朋友可以点击链接回去 ...

  2. Android简易实战教程--第四十八话《Android - Timer、TimerTask和Handler实现倒计时》

    之前本专栏文章中的小案例有写到:第三十九话<Chronometer实现倒计时> 以及使用异步实现倒计时:第三十三话< AsyncTask异步倒计时> 本篇文章 结合Timer. ...

  3. Android中使用Handler以及CountDownTimer实现包括倒计时的闪屏页面

    上一篇博文<Android中Handler使用浅析>通过实现倒计时闪屏页面的制作引出了Handler的用法以及实现原理,博文末尾也提到了实现过程中的Bug,有兴趣的朋友能够点击链接回去看看 ...

  4. 倒计时 总结 Timer Handler CountDownTimer RxJava MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. 倒计时实现方案总结 Timer Handler

    利用Timer实现倒计时 @BindView(R.id.send) Button send;//发送验证码 private int time = 60;//倒计时 private Timer time ...

  6. Android—实现自定义相机倒计时拍照

    这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: 两个TextView是用来显示提示信息和倒计时的 ...

  7. Android倒计时:计算两个时间将得到的时间差转化为倒计时(xx时xx分xx秒格式)

    首先是一个自定义控件: public class RushBuyCountDownTimerView extends LinearLayout { // 小时,十位 private TextView ...

  8. Android---闪频页和倒计时

    android闪频的实现非常简单,使用Handler对象的postDelayed()方法就可以实现.在这个方法里传递一个Runnable对象和一个延迟的时间.该方法实现了一个延迟执行的效果,延迟的时间 ...

  9. Android中实现倒计时

    1.需求 弹出提示的dialog,实现倒计时,结束后关闭dialog 2.dialog界面布局 <?xml version="1.0" encoding="utf- ...

随机推荐

  1. Linux 定时运行设置

    脚本设置位置: /etc/cron.d SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 每个小时的01分钟执行这个脚本 ...

  2. SAVEPOINT 标记

    create table duo(               --创建表格                v_xuhao number(3),                v_name varch ...

  3. P1822 魔法指纹

    一道放在分块训练中的分块打表屑题 看了神NaCly_Fish的题解学了间隔打表(话说这么屑的东西有什么学的必要吗) 内容大多摘自大佬的题解 1,答案可递推,才适合间隔打表 什么叫可递推呢?假设f[n] ...

  4. The SetStack Computer UVA - 12096

    题意:初始状态的栈内包含一个空集,对栈进行一下操作: PUSH:向栈内压入一个空集 DUP:复制栈顶,并压入栈内 UNION:将栈顶端两个集合出栈,并将两个元素的并集入栈 INTERSECT:将栈顶端 ...

  5. ssh免密登陆:sshpass -p [passwd] ssh -p [port] root@192.168.X.X

    正文: ssh免密登陆:sshpass -p [passwd] ssh -p [port] root@192.168.X.X

  6. python中单例模式的四种实现方式

    配置文件settings.py IP='100.0.0.2' PORT=3302 方式一:绑定给类的方法 class Mysql: __instance = None def __init__(sel ...

  7. 启动Eclipse发生错误:An internal error occurred during: "Initializing Java Tooling".

    问题描述   由于上一次关闭 Eclipse 时没有正常关闭,再次启动 Eclipse 时报错:An internal error occurred during: "Initializin ...

  8. WOW.js – 让页面滚动更有趣

    官网:http://mynameismatthieu.com/WOW/ 建议去官网一看 下载地址:https://github.com/matthieua/WOW 浏览器兼容 IE10+  Chrom ...

  9. 一丶Http协议

    一 HTTP概述 HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则. HTTP就是一个通信规则,通信规则 ...

  10. C# 高级编程05----常用修饰符

    常用修饰符: 1.访问可见性修饰符 修饰符 应用于 说明 public 类型或成员 任何代码都可访问 protected 类型或内嵌类型的成员 只有子类能访问 internal 类型或成员 只能在包含 ...