异步消息处理机制

异步消息处理机制
EM357
⼀、认识异步消息处理
所谓异步消息就是发送⼀个消息,不需要等待返回,随时可以再发送下⼀个消息。
异步消息处理线程启动后会进⼊⼀个⽆限的循环体之中,每循环⼀次,从其内部的消息队列中取出⼀个消息,然后回调相应的消息处理函数,执⾏完成⼀个消息后则继续循环。若消息队列为空,线程则会阻塞等待。
⼆、处理机制
Android 中的异步消息处理主要由四个部分组成:Message、Handler、MessageQueue 和 Looper。
1. Message
Message 是线程之间传递的消息,它可以在内部携带少量信息,⽤于在不同线程之间交换数据。Message 的 what、arg1、arg2字段可以⽤来携带⼀些整型数据,obj 字段可以携带 Object 对象。
2. Handler
Handler 是消息的处理者,也是线程之间的通讯兵,它主要⽤于发送和处理消息。发送消息⼀般使⽤ Handler 的 sendMessage()⽅法,发出的消息经过⼀系列的处理,最终会传递到 Handler 的 handleMessage() ⽅法。
3. MessageQueue
MessageQueue 是消息队列,它主要⽤于存放所有由 Handler 发送过来的消息,这部分消息会⼀直在消息队列中等待被处理。每个线程中只会有⼀个MessageQueue 对象。
4. Looper
Looper 是每个线程中 MessageQueue 的管家,调⽤ Looper 的 loop() ⽅法后,就会进⼊到⼀个⽆限循环当中;每当发现MessageQueue 中存在⼀条消息,就会将其取出,并传递到 handleMessage()⽅法当中。每个线程中也只会有⼀
个 Looper 对象。
利⽤该消息机制实现20个随机数的⽣成,在MainActivity中实现,代码如下:
public class MainActivity extends AppCompatActivity { private TextView textview;
private int i =0;
private Handler handler= new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case0:
textview.setText("已产⽣ 20 个随机数结束");
break;
case1:
int radom = msg.arg1;
textview.String(radom));
break;
硅铁合金
default:
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) { Create(savedInstanceState);
setContentView(R.layout.activity_main);
textview = findViewById(view);
new Thread(new Runnable() {
@Override
public void run() {
Message message = new Message();
i++;
if(i<=20) {
int radom =(int)(Math.random()*1000);
message.what =1;
message.arg1 = radom;
handler.sendMessage(message);
handler.postDelayed(this,1000);
}else{
message.what =0;
胶管缠绕机>低噪音风机箱
日本寿司刀
handler.sendMessage(message);
}
}
}).start();
}
}

本文发布于:2024-09-22 14:17:36,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/183104.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:消息   处理   线程   携带   等待
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议