使用handler倒计时
点击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倒计时的更多相关文章
- Android中使用Handler以及CountDownTimer实现包含倒计时的闪屏页面
上一篇博文<Android中Handler使用浅析>通过实现倒计时闪屏页面的制作引出了Handler的使用方法以及实现原理,博文末尾也提到了实现过程中的Bug,有兴趣的朋友可以点击链接回去 ...
- Android简易实战教程--第四十八话《Android - Timer、TimerTask和Handler实现倒计时》
之前本专栏文章中的小案例有写到:第三十九话<Chronometer实现倒计时> 以及使用异步实现倒计时:第三十三话< AsyncTask异步倒计时> 本篇文章 结合Timer. ...
- Android中使用Handler以及CountDownTimer实现包括倒计时的闪屏页面
上一篇博文<Android中Handler使用浅析>通过实现倒计时闪屏页面的制作引出了Handler的用法以及实现原理,博文末尾也提到了实现过程中的Bug,有兴趣的朋友能够点击链接回去看看 ...
- 倒计时 总结 Timer Handler CountDownTimer RxJava MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 倒计时实现方案总结 Timer Handler
利用Timer实现倒计时 @BindView(R.id.send) Button send;//发送验证码 private int time = 60;//倒计时 private Timer time ...
- Android—实现自定义相机倒计时拍照
这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: 两个TextView是用来显示提示信息和倒计时的 ...
- Android倒计时:计算两个时间将得到的时间差转化为倒计时(xx时xx分xx秒格式)
首先是一个自定义控件: public class RushBuyCountDownTimerView extends LinearLayout { // 小时,十位 private TextView ...
- Android---闪频页和倒计时
android闪频的实现非常简单,使用Handler对象的postDelayed()方法就可以实现.在这个方法里传递一个Runnable对象和一个延迟的时间.该方法实现了一个延迟执行的效果,延迟的时间 ...
- Android中实现倒计时
1.需求 弹出提示的dialog,实现倒计时,结束后关闭dialog 2.dialog界面布局 <?xml version="1.0" encoding="utf- ...
随机推荐
- Emit 自动生成IL代码,注入代码
Spring 框架中的注入代码,以及自动生成对接口的实现,则根据il代码注入 Emit学习(1)-Emit概览 一.Emit概述 Emit,可以称为发出或者产生.在Framework中,与Emit相关 ...
- 线程——自定义多线程task
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- mac air中编译安装swoole
本机php版本, 我的7.3.0 1 下载swoole源码 https://github.com/swoole/swoole-src/releases 我下载的版本是swoole-src-4.3.3. ...
- Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,
测试思路:单个测试集.单个测试汇成多个测试集.运行测试集.生成测试报告.发送至邮箱. 第一步:建立单个测试集,以cnblog登录为例. 测试用例: cnblog的登录测试,简单分下面几种情况:(1)用 ...
- mysql 5.7~默认sql_mode解读
当5.6升级到5.7时,首先要注意的就是sql_mode对业务的影响 大概可以分为几类1 共同支持,如果你的5.6和5.7sql_mode配置支持的交集一样,那么不用考虑2 5.7细说 1 ONLY ...
- SQL报错盲注
嗯哼,这几天篮球比赛,天天训练,学习都耽搁了,DDCTF做了一会心态就爆炸了,蓝瘦,明天再打一场,希望能赢呢,打完就疯狂继续学习了.今天抽空又做了一些基本的SQL注入题目,墨者学院的一道报错注入的题目 ...
- [Kubernetes]浅谈容器网络
Veth Pair 这部分内容主要介绍一个设备: Veth Pair . 作为一个容器,它可以声明直接使用宿主机的网络栈,即:不开启 Network Namespace .在这种情况下,这个容器启动后 ...
- linux系统下完全卸载Jenkins
1.关闭tomcat:./shutdown.sh 2.删除/webapps/jenkins下所有文件:rm -rf jenkins 3.删除配置文件:rm -rf /root/.jenkins/
- QT学习之如何在QToolBar中添加带图标的QToolButton并设置图标大小
在网上查到了三种方法,找到一种比较好理解的. 使用QIcon类: QToolButton *toolBtn1 = new QToolButton(this); //创建QToolButton tool ...
- 【原创】大数据基础之Logstash(4)高可用
logstash高可用体现为不丢数据(前提为服务器短时间内不可用后可恢复比如重启服务器或重启进程),具体有两个方面: 进程重启(服务器重启) 事件消息处理失败 在logstash中对应的解决方案为: ...