公式の Android FAQからの次の提案に特に興味があります。
オブジェクトへの WeakReferences の HashMap
長いキーを持つオブジェクトへの WeakReferences の HashMap を使用することもできます。アクティビティがオブジェクトを別のアクティビティに渡したい場合、オブジェクトをマップに配置し、インテント エクストラを介して受信側アクティビティにキー (カウンターまたはタイム スタンプに基づく一意の Long) を送信するだけです。受信者アクティビティは、このキーを使用してオブジェクトを取得します。
これを適切に実装する方法が見つかりませんでした。ここで WeakReferences が好まれる理由と、ハード参照を使用しない理由がわかりません。
私の実装(クラス XYのインスタンスをアクティビティ Aからサービス Bに送信したい):
受信サービスには、オブジェクトの静的 HashMap があります。
public static HashMap<Long, Object> parameters = new HashMap<Long, Object>();
送信部分のコード (アクティビティ A)
long key = SystemClock.elapsedRealtime(); B.parameters.put(key, new XY()); Intent i = new Intent(this, B.class); i.putExtra("PARAM_UPLOAD", key); startService(i);
受信側のコード (サービス B)
long key = intent.getLongExtra("PARAM_UPLOAD", -1); XY data = (XY)parameters.get(key);
コードはハード参照を使用しています。ここで弱参照を使用する必要があるのはなぜですか (FAQ で提案されているように)。そして、データを渡すためのそのような使用パターンは大丈夫ですか、それとも他のものを好みますか。