android开发 - 消息队列
来源:互联网 发布:淘宝如何寻找货源 编辑:程序博客网 时间:2024/06/14 09:00
消息队列
MessageQueue
消息队列,存放消息的地方,按照FIFO规则执行,每一个
线程只可以拥有一个MessageQueue,在创建Looper对象
会创建一个MessageQueue
消息对象,MessageQueue中存放的对象。一个MessageQueue
中可以包含多个Message对象,可以通过Message.obtain()
或者Handler.obtainMessage()获取Message对象。
但是这并不一定是直接创建一个新的实例,而是先从消息池
中看有没有可用的Message实例,存在则直接取出,返回这个实例
如果消息池中没有可用的Message实例,则才用给定的参数创建一个
Message对象,调用removeMessages()时,将Message从MessageQueue
中删除,同时放入到消息池中。
Looper
操作MessageQueue,一个Looper对应一个MessageQueue.
通过调用Looper.mylooper()可以获得当前线程的Looper
对象,Looper从MessageQueue中取出Message,然后,交由
Handler的handlerMessage()进行处理,处理完成后,调用
Message.recycle()将其放入消息池中
Handler
消息的处理者,handler负责将需要传递的信息封装成
Message对象,然后调用sendMessage()方法将消息放入
MessageQueue中,当MessageQueue中,当MessageQueue
循环到该Message,调用相应的handler对象的handlerMessage()
方法对其进行处理,Handler都可以共享同一Looper和MessageQueue
Handler 和 Message
一
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
System.out.println("what=" + msg.what + ",arg1="+
msg.arg1 + ",arg2=" + msg.arg2 + ",obj=" + msg.obj);
};
};
class MyTask implements Runnable{
@Override
public void run() {
//第一种方式
Message msg = Message.obtain();
msg.what = 1;
msg.arg1 = 2;
msg.arg2 = 3;
msg.obj = "jack";
handler.sendMessage(msg);
//第二种方式
Message msgs = Message.obtain(handler);
msgs.what = 1;
msgs.arg1 = 2;
msgs.arg2 = 3;
msgs.obj = "jack";
msgs.sendToTarget();
//第三种方式
Message msgMessage = Message.obtain
(handler,33);
msgMessage.arg1 = 11;
msgMessage.arg2 = 12;
msgMessage.obj = "rose";
msgMessage.sendToTarget();
//第四种方式
Message msgs2 = Message.obtain
(handler,33,"I am obj");
msgs2.sendToTarget();
//第五种方式
Message msgs3 = Message.obtain
(handler,33,20,21,"我是第五种方式");
msgs3.sendToTarget();
//第六中方式
Message msgs4 = Message.obtain(handler);
Bundle bunle = new Bundle();
bunle.putStringArray("str", new String[]
{"aaa","bbb","ccc"});
msgs4.setData(bunle);
msgs4.sendToTarget();
}
}
public void buttonClick(View v){
new Thread(new MyTask()).start();
}
}
MessageQueue
消息队列,存放消息的地方,按照FIFO规则执行,每一个
线程只可以拥有一个MessageQueue,在创建Looper对象
会创建一个MessageQueue
消息对象,MessageQueue中存放的对象。一个MessageQueue
中可以包含多个Message对象,可以通过Message.obtain()
或者Handler.obtainMessage()获取Message对象。
但是这并不一定是直接创建一个新的实例,而是先从消息池
中看有没有可用的Message实例,存在则直接取出,返回这个实例
如果消息池中没有可用的Message实例,则才用给定的参数创建一个
Message对象,调用removeMessages()时,将Message从MessageQueue
中删除,同时放入到消息池中。
Looper
操作MessageQueue,一个Looper对应一个MessageQueue.
通过调用Looper.mylooper()可以获得当前线程的Looper
对象,Looper从MessageQueue中取出Message,然后,交由
Handler的handlerMessage()进行处理,处理完成后,调用
Message.recycle()将其放入消息池中
Handler
消息的处理者,handler负责将需要传递的信息封装成
Message对象,然后调用sendMessage()方法将消息放入
MessageQueue中,当MessageQueue中,当MessageQueue
循环到该Message,调用相应的handler对象的handlerMessage()
方法对其进行处理,Handler都可以共享同一Looper和MessageQueue
Handler 和 Message
一
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
System.out.println("what=" + msg.what + ",arg1="+
msg.arg1 + ",arg2=" + msg.arg2 + ",obj=" + msg.obj);
};
};
class MyTask implements Runnable{
@Override
public void run() {
//第一种方式
Message msg = Message.obtain();
msg.what = 1;
msg.arg1 = 2;
msg.arg2 = 3;
msg.obj = "jack";
handler.sendMessage(msg);
//第二种方式
Message msgs = Message.obtain(handler);
msgs.what = 1;
msgs.arg1 = 2;
msgs.arg2 = 3;
msgs.obj = "jack";
msgs.sendToTarget();
//第三种方式
Message msgMessage = Message.obtain
(handler,33);
msgMessage.arg1 = 11;
msgMessage.arg2 = 12;
msgMessage.obj = "rose";
msgMessage.sendToTarget();
//第四种方式
Message msgs2 = Message.obtain
(handler,33,"I am obj");
msgs2.sendToTarget();
//第五种方式
Message msgs3 = Message.obtain
(handler,33,20,21,"我是第五种方式");
msgs3.sendToTarget();
//第六中方式
Message msgs4 = Message.obtain(handler);
Bundle bunle = new Bundle();
bunle.putStringArray("str", new String[]
{"aaa","bbb","ccc"});
msgs4.setData(bunle);
msgs4.sendToTarget();
}
}
public void buttonClick(View v){
new Thread(new MyTask()).start();
}
}
0 0
- android开发 - 消息队列
- Android消息队列处理消息
- Android消息队列模型
- Android消息队列
- Android消息队列模型
- Android消息队列原理
- Android 消息队列模型
- android 消息队列 ConcurrentLinkedQueue
- Android消息队列
- android消息队列机制
- Android消息队列总结
- Android消息机制——消息队列工作原理(Android艺术开发探索读书笔记)
- linux应用开发-消息队列
- Android 的消息队列模型
- Android 的消息队列模型
- Android 的消息队列模型
- Android 的消息队列模型
- Android 的消息队列模型
- 设计模式--简单工厂模式
- android httpClient 支持HTTPS的访问方式
- uva 10051 Tower of Cubes (最长上升子序列)
- ASCII码对照表(0-255)[备忘]
- Camera 图像处理原理分析- 亮度及曝光控制
- android开发 - 消息队列
- 题目1089:数字反转 (分别用C++/Java实现)
- 如何将两个文件合并?
- UVA - 10341 - Solve It (二分求解)
- 【HDU】5195-DZY Loves Topological Sorting(拓扑 + 线段树 + 贪心)
- android开发 - TreeView
- Ubuntu下tftp服务搭建
- 《豆美人》(散文一篇,与君共赏)
- PHP实现协程