1

私のアプリでは、現在実行中のアクティビティには、それを開始したアクティビティからのデータが必要です。親アクティビティには、必要なデータを取得するためにメソッドを呼び出す必要があるオブジェクトがあります。

私はこのようにやっています

ParentActivity で

public static Puzzle  puzzle;  // Puzzle is a class

子供の活動では

Puzzle puzzle = ParentActivity.puzzle;

ArrayList<String> cells = puzzle.getItemList();

うまくいくようです。しかし、このアプローチの正しさについてはわかりません。アンドロイドで許可されました。Android ランタイム フォームは親アクティビティを破棄します。

4

2 に答える 2

2

がデータ モデルを表す単純なオブジェクトである場合、これが単なるキャッシュであり、その内容がかなり小さいとPuzzle見なす限り、あなたが持っているものは「正しい」ものです。Puzzle

プロセスは、フォアグラウンドを離れた後いつでも終了できます。その時点で、キャッシュはPuzzle消えます。SharedPreferencesファイル、データベース、 「クラウド」など、生き残る必要があるデータは永続的に保存する必要があります。静的Puzzleデータはその永続データのキャッシュになる可能性がありますが、実際のデータ モデルは永続ストアであり、キャッシュされたものではありませんPuzzle

また、静的データ メンバーは、意図的なメモリ リークを表します。その static によって参照されるものPuzzleは、ガベージ コレクションできません。Puzzleが小さい限り、それは機能します。これが、 がより複雑なもの ( など) ではなくPuzzle、通常のであることが重要な理由でもあります。オブジェクトが複雑になればなるほど、より多くのメモリ リークが発生します。ObjectActivity

于 2012-12-28T14:40:10.000 に答える
1

Google を使用してください。この質問は 100 万回議論されました 活動間でデータを共有する最善の方法は何ですか?

パブリック スタティック パズル パズル

パズルは静的なので、親アクティビティがなくなっても、作成後に破棄されることはありません。パズルは 2 つのケースで破棄されます: 自分で行う場合と、アプリケーション プロセスが終了する場合です。したがって、アプローチを使用しても安全です。

ただし、「アクティビティ間でデータを共有する」をグーグルで検索し、より良い方法を見つけることをお勧めします(たとえば、アプリケーションクラスのシングルトーン)。

于 2012-12-28T14:42:32.040 に答える