obtainMessage参数含义

时间:2013-07-14 18:55:35

标签: android methods arguments message

我正在尝试理解这段代码:

        public void run() {
            byte[] buffer = new byte[1024];  // buffer store for the stream
            int bytes; // bytes returned from read()

            // Keep listening to the InputStream until an exception occurs
            while (true) {
                try {
                    // Read from the InputStream
                    bytes = mmInStream.read(buffer);
                    // Send the obtained bytes to the UI activity
                    mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget();
                } catch (IOException e) {
                    break;
                }
            }
        }

唯一对我来说完全模糊不清的是obtainMessage(MESSAGE_READ, bytes, -1, buffer),它对应于下一个声明:

public final Message obtainMessage (int what, int arg1, int arg2, Object obj)

Added in API level 1
Same as obtainMessage(), except that it also sets the what, obj, arg1,and arg2 values on the returned Message.

Parameters
what    Value to assign to the returned Message.what field.
arg1    Value to assign to the returned Message.arg1 field.
arg2    Value to assign to the returned Message.arg2 field.
obj     Value to assign to the returned Message.obj field.

那么,有人可以向我解释这些参数是什么以及它们的用途是什么?

P.S。:MESSAGE_READ在该代码中未定义。

2 个答案:

答案 0 :(得分:3)

mHandler.obtainMessage():

通过使用此方法,我们允许Android负责池化Message对象,这有助于保持对象分配,特别是如果您经常创建消息,例如使用动画处理程序。

what:用户定义的消息代码,以便收件人可以识别此消息的内容。

obj 要发送给收件人的任意对象。

arg1和arg2 是使用setData()的低成本替代方法,如果您只需要存储几个整数值。

答案 1 :(得分:0)

他们都是由你定义的。什么是id。它通常是在类中定义的枚举或常量,它拥有您发布到它的处理程序。它应该定义消息的类型,假设要发送多条消息。 arg1,arg2和obj都是与消息一起发送的值,以防您需要传递数据。他们可以拥有你想要的任何价值,或者根本不拥有。