当前位置: 代码迷 >> Android >> 请教, 以下代码是什么意思
  详细解决方案

请教, 以下代码是什么意思

热度:54   发布时间:2016-04-28 00:28:06.0
请问, 以下代码是什么意思?
    private Handler mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {

            case MSG_SEND_OK:
                break;
            case MSG_SEND_ERROR:
                break;
            case MSG_RECV_OK:
                break;
            case MSG_LINK_CONNECTED:
                break;
            case MSG_LINK_DISCONNECTED:
                break;
            case MSG_DATA_CHANNEL_AVAILABLE:
                break;
            case MAS_DATA_CHANNEL_UNAVAILABLE:
                break;
            case MSG_SENDING:
                break;
            case MSG_CONNECTING:
                break;
            case MSG_DISCONNECTING:
                break;
            case MSG_SEND_DONE:
                break;
            case MSG_UPDATE_PROGRESS:
                break;
            default:
                break;
            }
        }
    };


 请问, 以下代码是什么意思?

    mHandler.obtainMessage(MSG_SENDING).sendToTarget();
    mHandler.obtainMessage(MSG_LINK_DISCONNECTED).sendToTarget();

------解决思路----------------------
就是发送一个Message,obtainMessage中的参数会赋值给Message.what。使用提问中的两句代码发送消息后,mHandler 中的switch将分别匹配到case MSG_SENDING:  break;和case MSG_LINK_DISCONNECTED:  break;
------解决思路----------------------
这两句代码跟提问中的代码实现同样的功能

// 发送一个只包含what的消息
handler.sendEmptyMessage(MSG_SENDING);
handler.sendEmptyMessage(MSG_LINK_DISCONNECTED);

------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

这两句代码跟提问中的代码实现同样的功能

// 发送一个只包含what的消息
handler.sendEmptyMessage(MSG_SENDING);
handler.sendEmptyMessage(MSG_LINK_DISCONNECTED);


你的代码比以下可读性强, 不知使用者是何用意(原代码是原厂提供的)
    mHandler.obtainMessage(MSG_SENDING).sendToTarget();
    mHandler.obtainMessage(MSG_LINK_DISCONNECTED).sendToTarget();

obtainMessage是从MessagePool 拿Message对象的,省去了创建对象申请内存的开销。如果只是简单的几次使用Message,两个方法并没有什么区别,但要是使用多次差别就很明显。


请问, 使用多次时, 谁的效果好?(是 mHandler.obtainMessage(MSG_SENDING).sendToTarget(); 吗?)

是的
  相关解决方案