Handler的常见用法
来源:互联网 发布:女鞋淘宝鞋店知乎 编辑:程序博客网 时间:2024/06/04 23:35
这次对Hanlder的常见用法做一个小结,巩固一下基础知识。在Handler的异步操作中,我们会使用到Handler,Message,Looper。
Handler一般用来接收Message和发送Message
接收Message:
Handler handler=new Handler(new Handler.Callback() { int position; @Override public boolean handleMessage(Message msg) { switch (msg.what){ case 1://执行接收Message后的逻辑 break; } return true; } });或者:
Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); //执行逻辑 }};发送消息:
handler.sendEmptyMessage(1);
or(需要携带内容的):
Message message=new Message();message.what=1;message.obj="haha";handler.sendMessage(message);or(所得到的Message是从消息队列中获取,避免了new Message的内存开销,其源码中也是执行了target.sendMessage()方法,target就是handler):
Message m=handler.obtainMessage(1,2,3,"quan");m.sendToTarget();
Handler中的定时器
在Handler中给我们提供了postDelayed(Runnable r,long times)方法来完成定时器的功能
Runnable runnable=new Runnable() { @Override public void run() { handler.sendEmptyMessage(1); handler.postDelayed(runnable, 1000); }};点击事件调用:
findViewById(R.id.bn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handler.postDelayed(runnable,1000); } });最后在handMessage方法中进行逻辑处理
更新UI的操作
除了上述的发送Message的方式来更新UI,Handler还有一个post方法可以更新UI,其运行的线程和当前的Handler的线程一致,。
handler.post(new Runnable() { @Override public void run() { textView.setText(""); }});
在子线程中接收消息
在子线程中接收消息,我们要用到Looper,主线程不用,因为主线程已经默认使用Looper了,我们会使用looper的两个主要方法,一个是prepare和loop,前一个是创建Looper对象,后一个是执行Looper循环功能。
public Handler handler1;public class LoopThread extends Thread{ @Override public void run() { Looper.prepare(); handler1=new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 1: Toast.makeText(getApplication(),msg.obj+","+msg.arg1+","+msg.arg2+"",Toast.LENGTH_SHORT).show(); break; } } }; Looper.loop(); }}然后我们使用这个自定义的Looper线程
new LoopThread().start(); findViewById(R.id.bn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //发送消息的方法 } });
暂时就这样简单粗暴的总结一下,至于原理的东西,大家去看看那些大神的博客就好了,我也就是针对于Handler的常见用法做一个小结而已(我懒怪我咯 =。=)。
按键60秒倒计时小程序:
在线程中new message 再通过handle的sendMessage发送
Message message = new Message();
message.what = TIMER_DESC;
message.obj = count+"秒";
handler.sendMessage(message);
new 一个Handle 重写handleMessage()方法
Handler handler= new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case TIMER_DESC:
String time = (String) msg.obj;
mButtonTimer.setText(time);
break;
}
}
};
简写:
发送
mButtonTimer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count = 60;
handler.sendEmptyMessageDelayed(TIMER_DESC,1000);
}
});接收:Handler handler= new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case TIMER_DESC:
count--;
if(count>=0){
handler.sendEmptyMessageDelayed(TIMER_DESC, 1000);
mButtonTimer.setText(count+"秒");
}
break;
}
}
};
阅读全文
0 0
- Handler的常见用法
- Handler的常见用法
- handler的常见的几种用法
- Handler常见用法
- Handler常见用法
- Handler常见用法
- Handler常见用法
- Handler常见用法小结
- Handler常见用法
- Handler的用法
- Handler的用法
- Handler的用法2
- Handler的用法
- Android Handler的用法
- android Handler的用法
- Handler的用法
- Handler的用法
- handler的具体用法
- HDU 6038 函数问题
- 【补充】Linux-2.6.22.6 makefiles.txt翻译
- 用position: sticky 实现粘性元素区域悬浮效果
- Python API快餐教程(1)
- <<最小割模型在信息学竞赛中的应用>>的学习心得
- Handler的常见用法
- UPC 2017 Summer Training 1
- Ubuntu——触控板太灵敏
- 微信公众号授权登录(java实现)
- [Leetcode] 332. Reconstruct Itinerary 解题报告
- 水果笔试题
- POJ2479&poj2593-双连续子段和-Maximum sum
- 基于Servlet&Jsp的网上书店设计(一)
- HDU 2822 Dogs