Android 线程通信
来源:互联网 发布:单片机语言是什么语言 编辑:程序博客网 时间:2024/05/18 18:21
Android是属于单线程模型,所有的界面更新都在主线程中完成,所以主线程也叫UI线程。由于Android中特有的ANR机制,当遇到耗时操作时,我们通常需要启动工作线程来完成耗时操作,对于工作线程的执行结果需要反映到界面上时,我们就需要工作线程和主线程之间的通信,同时,主线程在特定情况下也需要向工作线程发起通信,比如点击界面上的某个按钮,改变工作线程中正在执行的操作。下面就来讲讲线程之间的通信。
线程间通信方法:
1、在需要接受消息的线程中创建消息队列(MessageQueue)和与之匹配的轮询对象(Looper),两只之间存在着严格的一对一关系,一个消息队列只能与一个轮询对象相关联。Android中主线程默认包含了消息队列与轮询对象,工作线程默认没有消息队列和轮询对象,需要自己创建
2、创建Handler对象并与需要接受消息的线程中的消息队列相关联,注意,消息的处理方法也在该Handler对象中实现。
a)创建Handler时必须指定与之关联的消息队列,由于Looper对象与消息队列之间存在严格的一对一关系,所以一般在创建Handler时通过指定与之关联的Looper对象来指定Handler与消息队列的关联:
Handler handler = new Handler(Looper looper);
b)若创建Handler时未明确指定与之关联的消息队列,则该Handler对象在哪个线程中被创建,就默认关联到该线程。如果该线程中未创建消息队列,则Handler创建失败。
c)Handler对象只能向与之关联的消息队列发送消息。
3、在需要发送消息的线程中使用步骤2中创建的Handler对象发送消息。
PS:小技巧
1、Android中的消息(Message对象)是由一个消息池来维护的,所以创建消息对象的时候尽量不要NEW一个新的消息可以用一下两种方法:
Message msg = Message.obtain();
Message msg = handler.obtainMessage();来获取消息对象。
2、在Handler中实现消息处理方法,除了重写Handler的handleMessage()方法外,还可在CallBack对象中实现handleMessage()方法,并在Handler构建是传入该CallBack对象,且Callback对象的执行优先级高于重写Handler的handleMessage()方法,Callback的handleMessage()方法会返回一个boolean值,若该值为true,则该消息被Callback消费,Handler中的handleMessage()方法不执行,为false时,先在callback的handleMessage中执行,再在Handler的handleMessage()方法中执行
Handler handler = new Handler(Callback callback);3、对于包含Rannable对象的Message来说,Looper对象从消息队列中取出消息时会判断该消息是否包含Rannable对象,如果包含,则会直接在当前线程执行Rannable对象的中的run()方法,并结束消息处理,不会再交给该handler对象处理。
//构造包含Rannable对象的msgMessage msg = Message.obtain(Handler handler,Rannable callback);//或者直接handler.post(Rannable callback);
- Android 线程通信
- 转载: Android 线程通信
- android线程间通信
- Android线程间通信
- Android 线程通信
- Android线程通信
- Android 线程通信
- Android线程间通信
- android 线程间通信
- Android线程间通信
- Android线程间通信
- android线程通信
- android线程间通信
- Android线程之间通信
- Android线程消息通信
- Android中的线程通信
- Android 线程通信
- Android 线程间通信
- iOS日历中给一个事件添加多个提醒
- java线程传统VS现代【2】
- jstl 标签库
- [Splay] BZOJ 3729 Gty的游戏
- 使用AddressBook来获取通讯录消息
- Android 线程通信
- Python学习之分布式进程初探(1)
- Programming Exercise 7:K-means Clustering and Principal Component Analysis 第一部分
- 设置安卓背景图片
- 第三周项目-输出星号图
- 【java】异常处理
- 第2周项目1—个人所得税计算器
- Windows7下安装Ubuntu14.04双系统说明
- 设计模式之策略模式(Strategy)