2

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

また、パーセル化すると同じ問題が発生するようです。確かに、いくつかのフィールドをアクティブ オブジェクトとして追加できるように見えますが、すべてを浅いコピーにすることはできません。

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

4

2 に答える 2

1

インテントを送信する場合、インテントとそれに関連付けられているすべてのデータは、プロセスの境界を越えてマーシャリングする必要があります。これが発生する唯一の方法は、オブジェクトが分割可能である場合です。

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

ただし、このタイプのアプローチに関する私の唯一の懸念は、インテントを送信した後、新しいアクティビティが開始される前にプロセスが終了する可能性があることです。その後、新しい意図のためにプロセスが再開されますが、マップに保存したデータは明らかに失われています。しかし、これは非常にまれな出来事である可能性が高いと思います。

于 2010-12-27T03:23:13.013 に答える
1

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

于 2010-12-27T05:14:34.603 に答える