各位看官们大家好,上一回中咱们说的是Android中Handler机制的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧!
看官们,我们在上一章回中介绍了Handler的知识,这一回中我们将通过文字结合代码的形式介绍如何使用Handler.
- 1.创建一个App项目,项目中只包含一个名叫MainActivity的空Activity;
- 2.定义Handler类的子类SubHandler,并且重写handleMessage方法;
public class SubHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case MSG_START:
showMessage(msg.obj.toString());
break;
case MSG_END:
showMessage(msg.obj.toString());
break;
default:
showMessage(msg.obj.toString());
break;
}
}
}
- 3.在MainActivity的onCreate函数中定义Handler类型的对象:
mSubHandler = new SubHandler();
- 4.在MainActivity中创建两个Button,并且设置监听器用来发送消息;
mBTStartMsg = (Button) findViewById(R.id.id_bt_start_message);
mBTEndMsg = (Button) findViewById(R.id.id_bt_end_message);
mBTStartMsg.setOnClickListener(v ->sendMsg(MSG_START,"Start"));
mBTEndMsg.setOnClickListener(v -> sendMsg(MSG_END,"End"));
- 5.定义一个用来发送消息的方法,通过该方法把消息发送到消息队列中;
public void sendMsg(int type,String content) {
Message msg = new Message();
msg.what = type;
msg.obj =content;
mSubHandler.sendMessage(msg);
}
- 6.Lopper从消息队列中取出消息并且回调Handler的handleMessage方法,这个操作是Looper自动完成的,不需要我们操作;
我们重点看一下步骤5中发送消息的方法,该方法的参数是消息的类型和内容,在方法中把这两个参数封装成Message类型的对象,然后使用Handler的sendMessage
方法发送到消息队中;另外,我们把消息的类型写成了常量,这样符合工程规范。
我们再分析一下骤2中重写的handleMessage方法,我们通过msg.what
来判断消息的类型,然后依据不同的类型来处理不同的消息,这里的处理方式比较简单:获取消息的内容并且通过Toast显示给用户;当我们分别点击start和end按钮
时,它就会弹出Toast来显示"Start"和"End".
这里显示的内容和我们发送消息时添加的内容完全相同。
Handler就这样默默无闻地我们发送并且处理了消息。至于消息队列如何创建,如何管理,我们不需要关心。此外,我们在代码中发送和处理消息都是在主线程中,没有涉及子线程中,大家可以自己去实现,或者等一等,我们在后面章回中会有在子线程中发消息,在主线程中处理消息的例子。
各位看官,关于Android中Handler机制的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!