消息handler message 线程通信 空消息


空消息的使用

private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
//得到当前显示的数值
int number = Integer.parseInt(tv_demo_number.getText().toString());
switch (msg.what) {
case WHAT_INCREASE:
//限制number<=20
if(number==20) {
//设置暂停不能操作
btn_demo_pause.setEnabled(false);
Toast.makeText(HandlerDemoActivity.this, "已经达到最大值", 0).show();
return;
}
number++;
tv_demo_number.setText(number+"");
//发送增加的延迟消息
handler.sendEmptyMessageDelayed(WHAT_INCREASE, 1000);
break;
case WHAT_DECREASE:
//限制number>=1
if(number==1) {
//设置暂停不能操作
btn_demo_pause.setEnabled(false);
Toast.makeText(HandlerDemoActivity.this, "已经达到最小值", 0).show();
return;
}
number--;
tv_demo_number.setText(number+"");
//发送减少的延迟消息
handler.sendEmptyMessageDelayed(WHAT_DECREASE, 1000);
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handler_demo);
init();
}
private void init() {
tv_demo_number = (TextView) findViewById(R.id.tv_demo_number);
btn_demo_increase = (Button) findViewById(R.id.btn_demo_increase);
btn_demo_decrease = (Button) findViewById(R.id.btn_demo_decrease);
btn_demo_pause = (Button) findViewById(R.id.btn_demo_pause);
btn_demo_increase.setOnClickListener(this);
btn_demo_decrease.setOnClickListener(this);
btn_demo_pause.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v==btn_demo_increase) {//自动增加 what =1
//限制Button可操作性
btn_demo_increase.setEnabled(false);
btn_demo_decrease.setEnabled(true);
btn_demo_pause.setEnabled(true);
//停止减少(移除未处理的减少的消息)
handler.removeMessages(WHAT_DECREASE);
//发消息(增加)
handler.sendEmptyMessage(WHAT_INCREASE);
} else if(v==btn_demo_decrease) {//自动减少 what=2
//限制Button可操作性
btn_demo_increase.setEnabled(true);
btn_demo_decrease.setEnabled(false);
btn_demo_pause.setEnabled(true);
//停止增加(移除未处理的增加的消息)
handler.removeMessages(WHAT_INCREASE);
//发消息(减少)
handler.sendEmptyMessage(WHAT_DECREASE);
} else if(v==btn_demo_pause) {//暂停
//限制Button可操作性
btn_demo_increase.setEnabled(true);
btn_demo_decrease.setEnabled(true);
btn_demo_pause.setEnabled(false);
//停止增加/减少(移除未处理的减少/增加的消息)
handler.removeMessages(WHAT_INCREASE);
handler.removeMessages(WHAT_DECREASE);
}
}
消息handler message 线程通信 空消息的更多相关文章
- Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)
keyword:Android 使用handler实现线程间发送消息 (主线程 与 子线程之间).(子线程 与 子线程之间) 相信大家平时都有使用到异步线程往主线程(UI线程)发送消息的情况. 本文主 ...
- Android - 消息机制与线程通信
以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luosheng ...
- Handler实现线程间的通信1
通过Handler实现线程间的通信,在主线程当中实现Handler的handlerMessage()方法,在WorkerThread中通过Handler发送消息 Handler实现线程间的通信实例: ...
- android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版
首先原谅我把文章的标题写的这么长.其实我还嫌弃它短了因为 写不下去了所以我就不写了.因为我实在不知道该怎么定义这篇文章的标题或许应该叫 "乱谈"比较合适. 这样可能还体现了 ...
- WCF技术剖析之十七:消息(Message)详解(上篇)
原文:WCF技术剖析之十七:消息(Message)详解(上篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]消息交换 ...
- android 37 线程通信Looper
安卓程序的主线程也叫UI线程. 工作线程和主线程的差别:安卓主线程已经调用了Looper.prepare()方法了,已经有一个MessageQueue对象了,所以才可以在工作线程用Handler发消息 ...
- Android线程通信
摘要 andriod提供了 Handler 和 Looper 来满足线程间的通信.例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传 ...
- 从Handler+Message+Looper源代码带你分析Android系统的消息处理机制
PS一句:不得不说CSDN同步做的非常烂.还得我花了近1个小时恢复这篇博客. 引言 [转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树] 作为A ...
- Handler 、 Looper 、Message异步消息处理线程机制( hander消息机制原理)
Handler . Looper .Message 这三者都与Android异步消息处理线程相关的概念. 那么什么叫异步消息处理线程呢? 异步消息处理线程启动后会进入一个无限的循环体之中,每循环一次, ...
随机推荐
- 洛谷——P1086 花生采摘
P1086 花生采摘 题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都 ...
- 树讲解——牧场行走( lca )
大视野 1602: [Usaco2008 Oct]牧场行走 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1947 Solved: 1021[Sub ...
- FMDB使用的数据库的三种形式
FMDB使用的数据库的三种形式 FMDB是iOS平台下一款优秀的第三方SQLite数据库框架.它以Objective-C的方式封装了SQLite的C语言API.使用起来,它更加面向对象,避免冗余的 ...
- VMware虚拟机直连物理网络的两种方式
VMware虚拟机直连物理网络的两种方式 使用VMware构建虚拟机,通常虚拟机都使用NAT模式.这时,虚拟机有独立的网段.使用NAT模式,虚拟机之间数据都通过虚拟网络传输,不会影响实体机所在的实 ...
- 提高速度 history 的利用
history的介绍history是shell的内置命令,其内容在系统默认的shell的man手册中.history是显示在终端输入并执行的过命令,系统默认保留1000条.[root@localhos ...
- AnsiString类型定义的时候可以直接指定代码页,比如950繁体字,936日文
procedure TForm3.FormCreate(Sender: TObject); type AnsiStringForPage = type AnsiString(950);//代码页 va ...
- sql标准支持了事务隔离级别
事务隔离级别 尽管数据库为用户提供了锁的DML操作方式,但直接使用锁管理是非常麻烦的,因此数据库为用户提供了自动锁机制.只要用户指定会话的事务隔离级别,数据库就会分析事务中的SQL语句,然后自动为事务 ...
- GOF23种设计模式-工厂模式
• 工厂模式: – 实现了创建者和调用者的分离. – 详细分类: • 简单工厂模式 • 工厂方法模式 • 抽象工厂模式 • 面向对象设计的基本原则: – OCP(开闭原则,Open-Closed Pr ...
- iOS_7_scrollView大图缩放
终于效果图: BeyondViewController.h // // BeyondViewController.h // 7_scrollView大图展示 // // Created by beyo ...
- golang map to struct
http://stackoverflow.com/questions/26744873/converting-map-to-struct func SetField(obj interface{}, ...