データ通信にBluetoothを使用していますが、それは単なるメモであり、私の質問に直接添付されていません. リモート デバイスは、1 ミリ秒あたり 5 ~ 10 バイトのパケットを送信します。私はそれらを分類して、メッセージを介してメインのアクティビティに送信します。差出人:
Bundle bundle = new Bundle();
Message msg;
if(something)
{
bundle.putSerializable("data", aObject);
msg = myHandler.obtainMessage(1);
}
else
{
bundle.putSerializable("data", bObject);
msg = myHandler.obtainMessage(2);
}
msg.setData(bundle);
mHandler.sendMessage(msg);
ハンドラー内。
switch (msg.what)
{
// aObject
case 1:
AObject aObject = (AObject) message.getData().get("data");
break;
// bObject
case 2:
BObject bObject = (BObject) message.getData().get("data");
break;
...//There are 15 cases like that
}
しばらくすると、ClassCastException が発生します。関連データで正しい値を送信していることを再確認しました。ハンドラーでメッセージを処理しているときに、送信者部分で上書きされていると思います。acquireMessage はグローバル メッセージ プールからメッセージを取得するためです。そのため、msg.what を確認した後、メッセージのデータ部分が送信者で変更され、ClassCastException が発生しています。
私の質問は; 私の考えは正しいですか?