Handler(消息机制)





Demo演示
//通过Handler事件倒计时的一个操作,并判断状态
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private Button mButton,mButton2;
private final static int STATE_START = 100;
private final static int STATE_RUN = 101;
private final static int STATE_END = 102;
//创建Handler对象
private Handler mHandler = new Handler() {
public void handleMessage(Message msg){
switch (msg.what){
case STATE_START:
mTextView.setText("倒计时开始");
break;
case STATE_RUN:
mTextView.setText(String.valueOf(msg.arg1));
break;
case STATE_END:
mTextView.setText("倒计时结束");
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView)findViewById(R.id.textview);
mButton = (Button)findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyThread myThread = new MyThread(10);
myThread.start();
}
});
}
class MyThread extends Thread{
int startnum;
MyThread(int num){
startnum = num ;
}
@Override
public void run() {
super.run();
Message startMsg = mHandler.obtainMessage();
startMsg.what=STATE_START;
mHandler.sendMessage(startMsg);
while (startnum >=0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message runMsg = mHandler.obtainMessage();
runMsg.what =STATE_RUN;
runMsg.arg1 = startnum;
mHandler.sendMessage(runMsg);
startnum--;
}
Message endMsg = mHandler.obtainMessage();
endMsg.what = STATE_END;
mHandler.sendMessage(endMsg);
}
}
}
//演示post() postAtTime() postdelayed()
public class NextActivity extends AppCompatActivity implements View.OnClickListener {
private TextView mTextView;
private Button button_post, button_postattime, button_postdelayed;
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
mTextView = (TextView) findViewById(R.id.textview_next);
button_post = (Button) findViewById(R.id.button_next_post);
button_postattime = (Button) findViewById(R.id.button_next_postattime);
button_postdelayed = (Button) findViewById(R.id.button_next_postdelayed);
button_postdelayed.setOnClickListener(this);
button_post.setOnClickListener(this);
button_postattime.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_next_post:
mHandler.post(new Runnable() {
@Override
public void run() {
mTextView.setText("立即执行");
}
});
break;
case R.id.button_next_postattime:
mHandler.postAtTime(new Runnable() {
@Override
public void run() {
mTextView.setText("指定时间执行");
}
},android.os.SystemClock.uptimeMillis() +2000); //PostAtTime的时间使用的是uptimeMillis()不是currentTimeMillis()
break;
case R.id.button_next_postdelayed:
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mTextView.setText("延迟时间执行");
}
}, 2000);
break;
}
}
}
Handler(消息机制)的更多相关文章
- Android消息传递之Handler消息机制
前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...
- Handler消息机制与Binder IPC机制完全解析
1.Handler消息机制 序列 文章 0 Android消息机制-Handler(framework篇) 1 Android消息机制-Handler(native篇) 2 Android消息机制-H ...
- Handler消息机制实现更新主UI
如下实现的是简单的更新主UI的方法,用Handler消息机制 将textview的内容每隔一秒实现num++ /* * handler消息机制 * asynctask异步任务 * * httpcli ...
- Android Handler消息机制不完全解析
1.Handler的作用 Android开发中,我们经常使用Handler进行页面的更新.例如我们需要在一个下载任务完成后,去更新我们的UI效果,因为AndroidUI操作不是线程安全的,也就意味着我 ...
- 源码篇——Handler消息机制
Handler消息机制 Message 消息 Message.obtain() Message msg = new Message() Handler new Handler(){ handlerMe ...
- Handler消息机制的一些原理(直接用code讲解)——Android开发
package com.example.handlertest; import android.os.Bundle; import android.os.Handler; import android ...
- Android Handler消息机制源码解析
好记性不如烂笔头,今天来分析一下Handler的源码实现 Handler机制是Android系统的基础,是多线程之间切换的基础.下面我们分析一下Handler的源码实现. Handler消息机制有4个 ...
- 深入理解 Handler 消息机制
记得很多年前的一次面试中,面试官问了这么一个问题,你在项目中一般如何实现线程切换? 他的本意应该是考察 RxJava 的使用,只是我的答案是 Handler,他也就没有再追问下去了.在早期 Andro ...
- 【Android】Handler消息机制
Handler消息机制主要涉及Looper.Handler.MessageQueue.Message.其中,Looper主要负责获取消息,Handler负责发送消息及处理消息,MessageQueue ...
- handler消息机制入门
handler消息机制入门 为什么要用handle? 我们在网络上读取图片信息时,是不能把耗时操作放在主线程里面的,当我们在子线程中获取到了图片的消息的时候,我们就需要把这个数据传给主线程. 而直接使 ...
随机推荐
- 省市县联动dropdownlist
下面就是在提交按钮的单击事件中填写代码(代码区)(前提是把省市县的数据库建好) protected void Page_Load(object sender, EventArgs e) ...
- drupal记录(一)
翻译包下载网址:locallize.drupal.org 中文模块 local 自动下载模块 L10n_update 第三方menu菜单 admin menu,menu bar 打开这个后要关闭系统自 ...
- 从inet_pton()看大小端字节序
#include<stdio.h> #include<netinet/in.h> #include<stdlib.h> #include<string.h&g ...
- jquery.base64.js简单使用
jquery.base64.js, 加密,使用,先引入jquery,然后引入jquery.base64.js 使用如下 js中加密如下 $.base64.encode(result[i].ipadre ...
- ajax加载模块实时刷新的原理
var loadMenu = function(data) { var trs = template.render('menu-list-temp', {'list': data}); ...
- Hibernate查询语句
1 hql查询 Hibernate的查询语句,hiberante提供的面向对象的查询语言,和sql语句的语法的相似.而且严格区分大小写. 1.1 from字句 /** * hql: from 字句 * ...
- 解决eclipse ctrl+鼠标左键不能用
选择[Window]菜单 Preferences ——>General——>Editors——>Text Editors——>Hyperlinking 把勾都点上,然后确定KE ...
- java删除被占用的文件
boolean result = f.delete();//判断是否删除完毕 if(!result) { System.gc();//系统进行资源强制回收 f.delete; }
- 把Git Repository建到U盘上去(转)
把Git Repository建到U盘上去 转 把Git Repository建到U盘上去 Git很火.原因有三: 它是大神Linus Torvalds的作品,天然地具备神二代的气质和品质: 促进了生 ...
- java 设置允许ajax XMLHttpRequest 请求跨域访问
怎样才能算跨域?协议,域名,端口都必须相同,才算在同一个域. 方案1: 使用XMLHttpRequest... 异步请求不能跨域访问,除非要访问的网页响应头信息设置为允许跨域访问. 将网页设置为允许 ...