点击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内核

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  2. maven配置及IDEA配置maven环境

    一. maven的下载及配置 1. maven下载地址 可以在网址:https://maven.apache.org/download.cgi下载最新版本的maven 2. maven文件解压缩 解压 ...

  3. 有效使用django的queset

    转载自https://www.oschina.net/translate/django-querysets 对象关系映射 (ORM) 使得与SQL数据库交互更为简单,不过也被认为效率不高,比原始的SQ ...

  4. 编写ROS程序--HelloROS

    <机器人操作系统浅析>ch3学习记录 A Gentle Introduction to ROS 3.1 创建工作区(工作空间)和功能包 创建工作空间 ~/ros 我们称之为工作区目录 在工 ...

  5. 2018-2019-2 20165325 《网络对抗技术》 Exp5:MSF基础应用

    2018-2019-2 20165325 <网络对抗技术> Exp5:MSF基础应用 实验内容(概要) 1.1 一个主动攻击实践,本实验选择 ms17_010_eternalblue(成功 ...

  6. 【转】一文掌握 Linux 性能分析之内存篇

    [转]一文掌握 Linux 性能分析之内存篇 前面我们已经学习了 CPU 篇,这篇来看下内存篇. 01 内存信息 同样在分析内存之前,我们得知到怎么查看系统内存信息,有以下几种方法. 1.1 /pro ...

  7. 023_System Integrity Protection in macos

    背景:之前写的在/usr/bin下的一个登陆线上脚本,由于使用timemachine还原了系统,发现怎么也修改不了,加sudo也不行. 后来查询才得知系统默认开启了"系统集成保护" ...

  8. WPF 10天修炼 第六天- 系统属性和常用控件

    WPF系统属性和常用控件 渐变的背景色 WPF中的前景色和背景色不同于传统Winform的设置,这些属性都是Brush类型的值.在XAML中,当为这些属性设置指定的颜色后将被转换为SolidColor ...

  9. Unity简单塔防游戏的开发——敌人移动路径的创建及移动

    软件工程综合实践专题第一次作业 Unity呢是目前一款比较火热的三维.二维动画以及游戏的开发引擎,我也由于一些原因开始接触并喜爱上了这款开发引擎,下面呢是我在学习该引擎开发小项目时编写的一些代码的脚本 ...

  10. Docker----搭建自己的gitlab(填坑之旅)

    在成功完成docker的基础实验之后,尝试着使用docker搭建自己的gitlab,用来存放自己的代码.本文主要介绍使用docker搭建gitlab过程中遇到的问题,我的服务器系统是:Ubuntu S ...