2011-02-20 18 views
0

こんにちは私たちは複数の画面を含む複雑なアプリケーションを開発しています。 共通のアクティビティを別々のアプリケーションapk(commonScreen apk)に保存することで、これらのアクティビティをインテントを使用する他のユーザーと同様に使用できるようにしました。複数のアプリとアクティビティ間でデータを共有するAndroid(状態、値、設定)

ここでは、メインアプリケーションとcommonScreen apkに存在するアクティビティ間でデータを保存して共有する一般的な方法が必要です。

我々は を使用して問題のためDont store global data in applicationを参照してください(ヌル)私たちはstartActivityForResult(commonScreenApkIntent)、 onActivityResultを呼び出したとき、我々はアプリケーションに存在するデータがなくなっていることがわかります、 (アプリケーションを拡張する)Applicationオブジェクト内のデータを保存すると考えしかし、それら。

大量のデータが含まれている場合、環境設定を使用して各アクティビティのデータを格納および取得するのは良い方法ですか?

メモ:保存したいデータの量は基本的にはアプリケーションボタンの状態(無効/有効)、値、構成です。それは最大1000の値になる可能性があります。

データを共有する方法をお勧めしますか?

+0

"私たちは共通のアクティビティを別々のアプリケーションapk(commonScreen apk)に保存することに決めました。そのため、これらのアクティビティは自分自身やインテントを使用する他のユーザーによって使用できるようになりました。 - しないでください。 – CommonsWare

答えて

3

あなたがSQLiteを使用して検討している?、ContentProvidersはあなたの人生を容易にすることができます

+0

あなたはSQL Liteのwebserviceから受け取ったアプリケーションボタンの状態、値、設定を保存することになりますか?それは非常にアプリに重いではないでしょうか?これはコンテンツプロバイダを使用できる共通のシナリオですか?提案してください。 –

+0

"何千もの値"を意味するなら、はい、SQLを使用してください。 "1000値"を意味する場合は、インテントを使用して渡すことができる、または共通データストレージクラス – Reno

+1

+1を使用して渡すことができるキー値arraylistを使用して、私の質問はSQLite DBを使用することを提案することでした。 – Squonk

1

私は強くあなたのアプリケーションのこの設計を再検討することをお勧めします。別々の.apksのコードは、一般に独立して実行でき、データとの密接な結合はできません。これが1つのアプリケーションであり、何らかの利便性のために.apksに分割されている場合、あなたはあらゆる種類の他の問題を引き起こすでしょう。たとえば、ユーザーが.apksの1つをアンインストールし、それらの1つ、等...?

MODE_WORLD_READABLEの使用を検討している場合は、停止して再検討してください。まず、デバイスにインストールされているのアプリケーションがそのデータを読み取ることを許可しているわけではありません。また、一般的に、あなたを噛んでしまうアプリ間の依存関係の悪い設計上の問題を示しています。

0

私はhackbodが言ったことに同意します。
(Dhamodharanはちょうど彼のウェブサイトを推進しています。)

あなたの質問には、「プリファレンスを使用して、各アクティビティにデータを格納し、取得している大規模なデータが含まれているときは良い方法です?」
私の答え=いいえ好みがあるべき小さな原始的なデータ(すなわち=各生徒があなたのクラスに持っている等級)に使用されます。
SharedPreferencesは、アプリケーション内にあるXMLファイルに結果を保存します。もしあなたがXMLを見つけたいなら、1)URアプリケーションを実行してください。 2)DDMSに行きます。3) "File Explorer"を使用して、Data-> data - >あなたのパッケージ名(com.example.whatever) - > shared_prefsに移動します。 XML文書が表示されます。

保存オプションhttp://developer.android.com/guide/topics/data/data-storage.html
共有設定:プライベートプリミティブデータをキーと値のペアに格納します。
内部ストレージ=デバイスのメモリにプライベートデータを格納します。
外部ストレージ=共有外部ストレージに公開データを格納します。
SQLiteデータベース=構造化データをプライベートデータベースに格納します。
ネットワーク接続=自分のネットワークサーバーでWeb上にデータを保存します。

SQLiteを使用してデータを保存することをお勧めします。そうすれば、Googleの大規模なデータセンターを使用することができます。独自のサーバーをお持ちの場合は、ネットワーク接続を使用してください。外部メモリ(SDカード)は、特にローエンドの携帯電話では、内部メモリ(内部メモリ=内部ストレージまたは共有プリファレンス)よりも多くのスペースを持つ傾向があるため、外部ストレージは私の3番目の提案です。たとえば、Samsung Gioがあります。内部メモリは181MBです。 SDカードには約2 GBの容量があります。大きな違い!

"複数の画面"があるため、このすべてを行っている場合は、断片を調べる必要があります。フラグメントは、複数の画面サイズ(つまり、携帯電話とタブレット)で1つのアプリケーションを制御できるようにするものです。

あなたはそれをすべて後方に持っているようです。一般的なアクティビティには、インテントが呼び出される内容を制御する権限が必要です。デバイスに基づいてどのフラグメントが表示されるかを制御する共通のアクティビティが必要です。その後、個々のフラグメントオブジェクト内で、SQLiteを使用して保存された状態を取得できます。

関連する問題