android.util.AndroidRuntimeException: { what=102 ... } This message is already in use.
同一個 `Message` 物件**被重複發送/加入佇列**。`Message` 內部有 `next` 指標用於鏈表佇列,一旦已在佇列中(`in use`),再次 `handler.sendMessage(msg)` 會拋出此異常。
// 錯誤:重複使用同一 Message 實例
Message msg = handler.obtainMessage(WHAT, data);
handler.sendMessage(msg);
// ... 稍後又發送同一 msg
handler.sendMessage(msg); // CRASH!
// 發送時現取現用
handler.sendMessage(handler.obtainMessage(WHAT, data));
// 或
Message msg = handler.obtainMessage(WHAT, arg1, arg2, obj);
handler.sendMessage(msg);
Message msg = new Message();
msg.what = WHAT;
msg.obj = data;
handler.sendMessage(msg);
Message msg = Message.obtain(handler, WHAT, data);
handler.sendMessage(msg);
// 原代碼片段中,發送訊息處應改為:
// case comm_frame.SYS_CFG_RSP_FRM:
// handler.sendMessage(handler.obtainMessage(comm_frame.SYS_CFG_RSP_FRM, sys_cfg_rsp_info));
// break;
// case comm_frame.EVENT_RSP_FRM:
// handler.sendMessage(handler.obtainMessage(comm_frame.EVENT_RSP_FRM, event_info_rsp));
// break;
`This message is already in use` 經典原因是**重複發送同一 Message 實例**。改用 `handler.obtainMessage()` 即時獲取新實例(或從池復用),問題立即解決。