基于Message的线程间通信实例
2014-09-28 22:57
597 查看
在Android应用程序中,经常使用Handler进行消息处理。一般我们在当前Activity中直接新建一个Handler实例,然后重写其handleMessage方法即可。
如下所示:
要触发上述消息处理,只需要调用handler.sendEmptyMessage(MESSAGE_TEST);即可。
Handler类的消息处理本质上要通过Looper对象进行处理。因为主线程默认已经初始化了一个Looper对象,在主线程上创建Handler对象时,可以使用默认的Looper对象。
当我们希望在另一个非主线程上使用Handler对象时,则需要提供一个Looper对象。Android为了方便开发,已经提供了一个HandlerThread,该类在普通线程上,创建了一个Looper对象,方便我们在一个新的线程上创建Handler对象,代码如下:
AnotherThread是我们从Handler类派生的一个子类,实现了消息处理:
当点击界面上的一个按键时,先发送MESSAGE_TEST2,在处理MESSAGE_TEST2时,将发送MESSAGE_TEST消息,实现了主线程与非主线程间基于消息的通信。
如下所示:
Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case MESSAGE_TEST: System.out.println("Receive a test Message!"); Toast.makeText(HandlerTestActivity.this, "Receive a test Message", Toast.LENGTH_LONG).show(); } } };
要触发上述消息处理,只需要调用handler.sendEmptyMessage(MESSAGE_TEST);即可。
Handler类的消息处理本质上要通过Looper对象进行处理。因为主线程默认已经初始化了一个Looper对象,在主线程上创建Handler对象时,可以使用默认的Looper对象。
当我们希望在另一个非主线程上使用Handler对象时,则需要提供一个Looper对象。Android为了方便开发,已经提供了一个HandlerThread,该类在普通线程上,创建了一个Looper对象,方便我们在一个新的线程上创建Handler对象,代码如下:
final HandlerThread testThread = new HandlerThread("test thread"); testThread.start(); testHandler = new AnotherHandler(testThread.getLooper());
AnotherThread是我们从Handler类派生的一个子类,实现了消息处理:
class AnotherHandler extends Handler { public AnotherHandler(Looper looper) { super(looper); } public void handleMessage(android.os.Message msg) { switch (msg.what) { case MESSAGE_TEST2: Toast.makeText(HandlerTestActivity.this, "Receive a test2 Message", Toast.LENGTH_SHORT).show(); handler.sendEmptyMessage(MESSAGE_TEST); } } }
当点击界面上的一个按键时,先发送MESSAGE_TEST2,在处理MESSAGE_TEST2时,将发送MESSAGE_TEST消息,实现了主线程与非主线程间基于消息的通信。
<pre name="code" class="java"> Button btn = (Button) findViewById(R.id.test); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub testHandler.sendEmptyMessage(MESSAGE_TEST2); } });
相关文章推荐
- vc 基于对话框多线程编程实例——线程之间的通信
- vc 基于对话框多线程编程实例——线程之间的通信
- vc 基于对话框多线程编程实例——线程之间的通信
- 基于VC的串行通信技术应用实例
- JAVA线程的应用实例(运用2种中断线程方式,基于实现进度条为例)
- VC中利用多线程技术实现线程之间的通信(四)---实例
- Lock和Condition实现线程通信(附阻塞队列的实例)
- Android的消息机制,用Android线程间通信的Message机制,Android中Handler的使用方法——在子线程中更新界面,handler机制
- Android的消息机制,用Android线程间通信的Message机制,Android中Handler的使用方法——在子线程中更新界面,handler机制
- 多线程通信实例(子线程向主线程:用委托事件实现)
- Java实现的基于socket通信的实例代码
- 实例学MFC(2)--线程间的通信之消息与事件
- Android线程间通信的Message机制
- Android线程间通信的Message机制
- Android的消息机制,用Android线程间通信的Message机制,Android中Handler的使用方法——在子线程中更新界面,handler机制
- Android的消息机制,用Android线程间通信的Message机制,Android中Handler的使用方法——在子线程中更新界面,handler机制
- Android线程间通信的Message机制
- 基于AO的线程间通信
- Android的消息机制,用Android线程间通信的Message机制,Android中Handler的使用方法——在子线程中更新界面,handler机制
- java学习之路——基于UDP的Socket网络通信实例