// 下載圖片
byte[] data = ...;
Message msg = Message.obtain();
msg.obj = data; // byte[]
msg.what = IS_FINISH;
handler.sendMessage(msg);
// 下載文字
Message ms = Message.obtain();
ms.obj = "haha"; // String
ms.what = IS_OK;
handler.sendMessage(ms);
// Handler 處理
public void handleMessage(Message msg) {
byte[] data = (byte[]) msg.obj; // 此處崩潰:String 無法轉 byte[]
...
}
msg.obj 類型不一致:圖片消息為 byte[],文字消息為 String。handleMessage 統一按 byte[] 強轉,處理文字消息時拋 ClassCastException。
public void handleMessage(Message msg) {
switch (msg.what) {
case IS_FINISH:
byte[] data = (byte[]) msg.obj;
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
imageView.setImageBitmap(bmp);
break;
case IS_OK:
String text = (String) msg.obj; // 正確轉型
textView.setText(text);
break;
}
}
class Result { int type; byte[] bytes; String text; }
// 發送時 new Result{type=1, bytes=data}
// 處理時 (Result)msg.obj 統一轉型
what 對應固定 obj 類型,文檔化約定。Message.obj 傳遞數據時,優先用 Bundle (setData/getData) 類型安全。