一起Talk Android吧(第一百七十三回:Android的中Handler机制二)

各位看官们大家好,上一回中咱们说的是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机制的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

发布了528 篇原创文章 · 获赞 131 · 访问量 62万+

猜你喜欢

转载自blog.csdn.net/talk_8/article/details/105164270