2

私はこのコードを理解しようとしています:

        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.

それでは、これらのパラメータが何であり、何のために役立つのか、誰かが私に説明してもらえますか?

PS: MESSAGE_READ はそのコードでは定義されていません。

4

2 に答える 2

3
mHandler.obtainMessage():

このメソッドを使用することで、Android が Message オブジェクトのプールを処理できるようになり、特にアニメーションのハンドラーを使用するなど、メッセージを頻繁に作成する場合に、オブジェクトの割り当てを抑えるのに役立ちます。

what: 受信者がこのメッセージの内容を識別できるようにするためのユーザー定義のメッセージ コード。

obj受信者に送信する任意のオブジェクト。

arg1 と arg2は、少数の整数値のみを格納する必要がある場合に setData() を使用するよりも低コストの代替手段です。

于 2013-07-14T19:13:14.440 に答える
0

それらはすべてあなたによって定義されています。IDとは。通常、投稿先のハンドラーを所有するクラスで定義された列挙型または定数のいずれかです。送信するメッセージが複数あると仮定して、メッセージのタイプを定義する必要があります。arg1、arg2、および obj はすべて、データを渡す必要がある場合にメッセージと共に送信される値です。必要な値を保持することも、まったく保持しないこともできます。

于 2013-07-14T19:10:35.360 に答える