2010-12-26 4 views
2

私はインテントを通して他のアクティビティに渡したいオブジェクトがいくつかあります。しかし、これらのオブジェクトは、他のオブジェクトの浅いコピーである必要があります。読み込みのみになります(変更されても元のアクティビティで変更されることを望みます)。オブジェクトのシリアル化も可能ですが、オブジェクトのすべてのフィールドがシリアライズ可能であるとは限らないため、私もそれを行うことはできません。アンドロイドにあるインテントのオブジェクトを浅くコピーする

また、同じ問題に遭遇する可能性があります。確かに、アクティブオブジェクトとしてフィールドのいくつかを追加できるようですが、全体を浅いコピーにすることはできません。

インテントでオブジェクトのシャローコピーを作成する方法はありますか、通常はjavaのパラメータを渡すように、シャローコピーのデータを別のアクティビティに渡す方法はありますか?ありがとうございました。

答えて

1

JesusFrekeは、Intentを介してオブジェクトに参照(ポインタ)を渡すことができないという点で正しいです。インテントは、そのデータへの参照ではなく、シリアル化されたデータであることを意味します。しかし、しばしばメモリリークの原因になるので、私は静的マップ手法に対して推奨します。代わりにandroid.app.Applicationのサブクラスを作成し、それを使用してアクティビティ間で共有する必要のあるデータ構造の参照を格納することをお勧めします。

+0

ありがとうございました。私はついにオブジェクトのIDを渡し、データベースから再クエリしました。しかし、有益な情報をありがとう。悲しいことに、(安定した)ポインタを渡す方法はありません。 –

1

インテントを送信すると、そのインテントとそれに関連するすべてのデータをプロセスの境界を超えてマーシャリングする必要があります。これが起こる唯一の方法は、オブジェクトが分解可能であるかどうかです。

ただし、新しいインテントを送信しているコードがインテントによって開始されているアクティビティと同じプロセスにある場合、送信するデータを保持するために静的マップを作成する新しいアクティビティを作成し、インテント内のそのデータにキーを渡します。新しいアクティビティでマップからデータを検索できます。

しかし、私の唯一のアプローチは、新しいアクティビティが開始される前にインテントを送信してからプロセスが終了する可能性があるということです。そして、新しいインテントのためにプロセスが再開されますが、マップに保存したデータは明らかに消えてしまいます。私はこれがおそらく非常にまれな出来事であると推測します。

関連する問題