2010-11-23 16 views
7

私は現在、アンドロイドデバイスにオブジェクト構造を保存する必要があるという問題に直面しています。アンドロイドデバイスに大きなアプリケーションデータを保存する場所

私はアプリケーションサーバー(AsyncTaskの助けを借りて)の呼び出しを開始し、サーバーからよく知られている応答(xml-response)を取得し、データを解析して最終的にオブジェクト構造に変換します(非常に複雑なクラス図と、クラス間の関連付けが多い)。これまでのところ、XMLPullParserのおかげで働いていました;) 私の活動の間にフェッチされたデータをどこに格納する(そしてもちろん共有するのか)と思っています...私はすでにsqliteを使うことができると知っています。 or-mapper(j2ee環境での休止状態など)。私はまた、この機密データをデバイス(sqliteまたはファイルシステム)に保存することは許可されていないので、私の最初のアプローチはこのデータをシングルトン(メモリに保持されているソース)に格納することでした。しかし、システムが低メモリになるとどうなりますか?アンドロイドは私のシングルトンに保存されているデータを "破壊"できますか?私はすでにandroid.app.Applicationクラスの拡張について読んでいます...だから、アンドロイドデバイスにオブジェクトデータ(「Webサービス」と呼ばれる)を安全に保存する最良の方法は何ですか?

ところで、Androidの開発はすばらしかったです!私たちは現在、AndroidとiPhoneにWindows Mobile 6.5 Appを移植しています。私の同僚(iPhone-devの責任者)はいつも不平を言っています^^

答えて

2

ORマッパーに関しては、先日OrmLiteに出くわしました。これはJava用の一般的なORMツールですが、Androidで動作するように特別な機能も備えています。私はまだ自分自身でテストする時間がありませんでしたが、それは有望に見えます:)

機密データを電話機に保存するには、本当にメモリに格納するオプションがありません。あなたが提案したシングルトン)。あなたのアプリケーションがバックグラウンドになると即座に殺すことができるので、にはがあり、何らかの方法で保存したいデータが残っています。つまり、データをInternal Storageに保存した場合、これは電話上の他のアプリでは利用できません(電話がルートされていないと仮定すると、これは簡単に回避できます)。私はこれがSQLiteを使用して保存するデータにも当てはまると信じていますが、私は100%確実ではないので、保証しません。

しかし、基本的には、アプリがルート以外のデバイスでのみ実行されることが確実であれば、データを内部ストレージに保存するのはかなり安全です。それで十分でない場合は、javax.cryptoパッケージがありますが、私はそれを使ったことはありませんので、本当に何も言えません。

+1

こんにちはNailuj、あなたの詳細な答えに感謝!だから、唯一の方法は、android.app.Applicationクラスを拡張してデータを格納することだと思います。これは、フェッチされたデータを低メモリに「安全に」格納できる唯一のチャンスです(システムがアプリケーションを終了させるとき)。データをシリアライズしてファイルシステムのjavax.cryptoに格納し、メモリが使用可能なとき(またはアプリケーションの状態が復元されたとき)にそのデータをリロードするのはどうでしょうか? –

+1

@ tim.kaufner:そう、私は 'javax.crypto'について言及しました。他に "安全な"ソリューションがなければ、それを使用してデータを暗号化し、それを内部ストレージ(またはその問題のSQLiteデータベース)に保存することができます。暗号化/復号化の余分なレイヤーを追加する以外は、Androidアプリケーションで通常どおりに状態を処理する方法(onPause()で保持したいデータをそのまま残しておき、 onCreate()など)。 – Nailuj

+1

私は試してみる:) OrmLiteライブラリに言及してくれてありがとう。また、 "ポータブルな" ORマッパーがあるのを知らなかったが、ファイルシステムにデータを格納する方が好きだし、外部のsd-カード。しかし、私は大規模なオブジェクトセットのシリアル化/逆シリアル化がこの種のデバイスで高速であるかどうかはわかりません...私はそれを試してみて、何が起こるか見てみましょう:) –

関連する問題