您的位置:首页 > 其它

基于Message的线程间通信实例

2014-09-28 22:57 597 查看
在Android应用程序中,经常使用Handler进行消息处理。一般我们在当前Activity中直接新建一个Handler实例,然后重写其handleMessage方法即可。

如下所示:

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);
}
});



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐