1

マルチメガバイトのデータ構造とその他のオブジェクト (上記のデータ構造を参照する) を単一のプロセスでアクティビティ間で共有したいと思います (これParcelableは問題外です。データの多くはとにかく C++ に存在します)。任意のオブジェクトを新しいアクティビティに送信するだけでなく、任意の結果オブジェクトを返したいです。

しかし、アクティビティは互いに開始し、インテントを介して結果を返します。インテントには任意のオブジェクトを含める方法がないようです。現在static、回避策として変数を使用していますが、メモリ リークが懸念されます。アプリの 1 つのインスタンスのみを実行する予定ですが (今のところ)、同じ Activity の 2 つのインスタンスを使用するとどうなるかを考えるとぞっとします。どういうわけかActivityスタックに乗ります。

では、SO コミュニティの皆さん、代わりにどのようなコミュニケーション メカニズムをお勧めしますか?

PS Android がプロセスの複数のコピーを生成するかどうか、たとえば 2 つのアプリが個別に 3 つ目のアプリを起動した場合など、誰かが知っていますか?

4

2 に答える 2

2

マルチメガバイトのデータ構造とその他のオブジェクト (上記のデータ構造を参照する) をアクティビティ間で 1 つのプロセスで共有したい

あなたが本当に必要としているのは、すべての活動が参照できる一元化されたデータ モデルであることを願っています。

任意のオブジェクトを新しいアクティビティに送信するだけでなく、任意の結果オブジェクトを返したいです。

繰り返しになりますが、皆さんが本当に必要としているのは、すべてのアクティビティが参照できる集中型のデータ モデルであることを願っています。アクティビティ間で「数メガバイトのデータ構造」を渡したいと言うことは、Web アプリの URL でクエリ パラメーターを介して「数メガバイトのデータ構造」を渡したいと言うことと似ています。

現在、回避策として静的変数を使用していますが、メモリ リークが懸念されます。(今のところ) アプリの 1 つのインスタンスのみを実行する予定ですが、同じインスタンスが 2 つあるとどうなるかを考えるとゾッとします。アクティビティは、何らかの方法でアクティビティ スタックに積み上げられます。

実際に集中化されたデータ モデルがあれば (静的データ メンバーまたはその他の手段を介して)、データのコピーについて心配する必要はありません。さらに、エクストラを介してデータを渡すたびに、Intentすでにコピーを作成しています。

では、SO コミュニティの皆さん、代わりにどのようなコミュニケーション メカニズムをお勧めしますか?

一元化されたデータ モデルを持ち、Intentエクストラで識別子を渡します。

2 つのアプリが独立して 3 つ目のアプリを起動する場合など、Android がプロセスの複数のコピーを生成するかどうかは誰にもわかりませんか?

各アプリは、既定では、誰が "開始" したか、何回 "開始" したかに関係なく、1 つのプロセスで実行されます。

于 2012-06-29T18:00:15.417 に答える
0

Web サービスとクライアントの間で任意のオブジェクトを通信する場合と同様に、オブジェクトをシリアル化し、反対側で逆シリアル化し、これらのオブジェクトを Intent バンドルに渡すことができます。これは、XML または JSON シリアライザー/デシリアライザーを使用して行うことができます。

編集: OK、CommonWares のコメントを見た後、インテントと私の最初の提案を掘り下げましたが、結局あまり良くないかもしれません。小さなオブジェクトでは問題なく機能しますが。

したがって、私が考えることができるいくつかの代替手段があります。

  1. 既に行っているように、カスタム Application オブジェクトを使用して静的データ メンバーを使用します。
  2. データをシリアライズしてディスクに保存する
  3. データベースに格納する
  4. サービスを利用する
  5. アクティビティ間で大きなサイズのデータ​​を渡さない
于 2012-06-29T17:48:57.723 に答える