Message类

  Message对象可以包含一些简单的数据,并且可以通过Handler进行发送和处理。Message对象可以通过Message.what(int)方法中的int参数进行标志。Message对象使用两个int类型的字段来存储需要发送的信息,也可以使用一个Object类型的对象来存储一个简单对象的信息。

  • Message.what:标识一个Message对象。
  • Message.arg1:需要传递的int类型的数据。
  • Message.arg2:需要传递的int类型的数据。
  • Message.obj:存储任意数据类型(Object)的对象。

  你可以使用Message msg = new Message()方法来创建一个Message对象,但是不建议这么做,因为我们有更高效的方法来获得Message对象:使用Message msg = Message.obtain()Handler.obtainMessage()来获取一个Message。这个Message对象被Handler发送到MessageQueue之后,并不会被销毁,可以重复利用,因此比使用new方法来创建一个Message对象效率更高。
  当你需要将消息传递到一个后台线程时,建议使用Handler.obtainMessage来创建一个Message对象:

int what = 0;
String hello = "Hello!";
/* 获取一个和后台线程关联的Message对象 */
Message msg = mHandler.obtainMessage(what, hello);
/* 发送一个消息到后台线程 */
mHandler.sendMessage(msg);

  根据使用场景不同,Android系统提供了几种常用的封装:

  • Handler.sendMessage(Message msg):在MessageQueue中添加一个Message对象。
  • Handler.sendMessageAtFrontOfQueue(Message msg):添加一个Message对象到MessageQueue的前面。
  • Handler.sendMessageAtTime(Message msg, long timeInMills):在指定的时间发送一个Message对象。
  • Handler.sendMessageDelayed(Message msg, long timeInMillis):在指定的时间之后,发送Message对象。

发送完一个消息后,怎么处理发送的消息任务呢?在我们创建Handler对象的时候,可以实现它的handleMessage方法,在这个方法里面处理handler发送的Message对象:

private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        /* 根据“msg.what”字段的标志处理不同的消息 */
        /* 如果Message比较简单,你也可以不使用“msg.what”来作为区分 */
        switch (msg.what) {
            /* ... */
        }
    }
};

当然还有很多处理Message消息的方法,比如你想取消一个Message的发送,可以调用handler.removeMessages(int what)方法,其他的方法可以自行查阅API文档。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值