web-dev-qa-db-ja.com

どのAndroid使用するデータストレージテクニック?

Androidドキュメントには以下のオプションがありますが、それぞれが最適な状況については説明していません。各メソッドの長所と短所は何ですか?例:どのような条件下でSQLが共有設定よりも優れているでしょうか?

  • 共有設定
  • 内部記憶装置
  • 外部記憶装置
  • SQLiteデータベース
  • ネットワーク接続
47
Declan McKenna

Androidのさまざまなストレージオプション

enter image description here


コンテンツプロバイダー

enter image description here

  • Application1からデバイスに追加された構造化データは、同じデバイスにある別のapplication2にはアクセスできないが、application1によってデバイスに追加されたプロフィール写真は、同じデバイスで実行されているapplication2

  • Android都市としてのデバイス、その中のアプリケーションは都市の家、家の人々(アプリケーション)はデータです。今ではコンテンツプロバイダーは都市の仲介者のようです(Androidこのブローカーは、Androidデバイスが異なるアプリケーションのデバイス内のデータへのアクセスを提供しているので、コンテンツプロバイダーとして参照している別の家を見つけるために都市の人々にアクセスを提供します。


共有設定

enter image description here

  • アカウントにログインするために使用するFace bookアプリと言うアプリがあるとします。

  • これで、初めてユーザー名とパスワードを入力してアカウントにアクセスできるようになりました。 1時間後に再びアプリケーションからログアウトすると、同じFace bookアプリを使用してアプリケーションに再度ログインします。

  • アカウントにログインするには、ユーザー名とパスワードを再度入力する必要があります。アプリケーションにテーマを設定し、現在の携帯電話でアプリがどのように表示されるかを設定します

  • 電話を使用してアプリケーションにログインすることを検討しているため、これは不要です。だから私はいつも携帯電話を使って何度もログインするので、クレデンシャルを何度も何度も入力すると、ユーザーフレンドリーなアプリではないことがわかります

  • 共有設定は、その機能を使用してxmlファイルでデータを共有できるシナリオで非常に便利です。このファイルは、アプリに破壊されない、スマートフォンにインストールされたAndroidアプリここでは、現在のアプリケーションのユーザー設定データを保存できます。

  • その結果、次回スマートフォンでアプリを開くと、必要なフィールドにデータが自動的に入力され、設定が表示されます


ファイルストレージ

enter image description here

  • Androidでは、デバイスストレージスペースを使用して、アプリケーション用のデータを格納できます。データのタイプには、テキストファイル、画像ファイル、ビデオファイル、オーディオファイルなどが含まれます。

  • 図からわかるように、これを実行できる場所は2つあります。 1つの方法は、RAWファイルをプライマリ/セカンダリストレージに書き込むことです。別の方法は、キャッシュファイルをプライマリ/セカンダリストレージに書き込むことです。

  • 生データとキャッシュデータの保存にも違いがあります。ユーザーがメモリに保存した生データは、ユーザーが明示的に削除する必要があります。メモリに保存されているキャッシュデータは、メモリが不足しているとシステムが自動的に削除するため、永続的なデータではありません。

enter image description here

内部ストレージ:

  • アプリケーションのユーザーが内部ストレージにデータを保存している場合、そのアプリケーションのユーザーのみがモバイル上のデータにアクセスでき、ユーザーがアプリケーションをアンインストールすると、そのデータは自動的に削除されます。どの内部メモリがプライベートであるかといえば。

  • アプリの内部ストレージディレクトリは、パッケージ名という名前を使用してAndroid=ファイルシステムの特別な場所に保存されます。

  • 他のアプリまたは現在のアプリのユーザーは、特定のユーザーおよび特定のアプリによって設定されたファイルにアクセスできません。ただし、読み取り/書き込み可能なアクセスがユーザーに明示的に許可されている場合を除きます。

enter image description here


SQLite

enter image description here

  • Sqliteは、Androidアプリが実行されているモバイルで、より構造化されたデータをローカルに格納するために使用されます。構造化データには、.

  • Sqliteは、MysqlやOracleのような同様の機能を提供しますが、機能は限られています。いくつかのことには、テーブルでのクエリ操作の実行が含まれます。ビューの作成などの機能もありますが、ストアドプロシージャなどの一部の機能は使用できません。

  • Sqliteは、一度ダウンロードしてアプリケーションが実行されるまで何度も使用できる複雑で大きなデータを保存するのに非常に役立ちます。アプリケーションが閉じられると、sqliteデータベースも破棄されます。


すべてのピースをまとめる

enter image description here

103
Devrath
  • 共有設定は、アプリケーションの設定やその他の小さなデータの保存に適しています。これは、いくつかのデータ型(boolean、float、int、long、string)に対応する、非常に単純で永続的な文字列キーストアです。たとえば、アプリにログインがある場合、SharedPreferences内に文字列としてセッションキーを保存することを検討できます。
  • 内部ストレージは、ユーザーが内部ストレージに簡単にアクセスできないため、ユーザーがアクセスする必要のないアプリケーションデータの保存に適しています。キャッシング、ログなどに適しています。アプリのみが読み取り更新または削除の作成を意図しているもの。
  • 外部ストレージ。私がちょうど言ったことの反対のために大きい。 Dropboxアプリはおそらく外部ストレージを使用してユーザーのDropboxフォルダーを保存するため、ユーザーは、ファイルマネージャーなどを使用して、Dropboxアプリケーションの外部でこれらのファイルに簡単にアクセスできます。

  • SQLiteデータベースは、多くの構造化データとそれを管理するための比較的厳格なスキーマを使用する場合に最適です。簡単に言えば、SQLiteはMySQLやPostgreSQLに似ていますが、サーバーデーモンとして機能するデータベースの代わりにphpのようなCGIスクリプトからクエリを取得します。アプリケーション内。 SQLiteは専用データベースほどの規模に拡張することはできませんが、Androidアプリなどの小規模なアプリケーションには非常に迅速かつ便利です。データベースは、データをすべてファイルに書き込んでから独自の形式で解析するのが楽しいので、データベースは素晴らしいです。 、データをXMLまたはJSONで保存することはそれほど悪くありません。

  • ネットワーク接続は、クラウドにデータを保存することを指します。 HTTPまたはFTPファイルとJava.net。*パッケージを介したコンテンツ転送により、これが実現します。

36
Teddy

SharedPreferencesは主に、アプリケーション設定など、設定メニューからアクセスできるアプリケーション固有の設定用です。ここではすべてをシンプルにすることをお勧めします-主にブールフラグ、短い文字列、または整数。 SharedPreferencesデータはデバイスの再起動時に保持され、アプリのアンインストールとともに削除されます。データはキーと値のペアとして保存されます。

内部ストレージは、大規模な非永続データストレージに主に使用されます。画像、短いビデオクリップ、大きなテキストファイルなどをprocessしたい場合は、内部ストレージを利用します。しかし、処理したデータを内部ストレージに保存しません-その機能は、CPUのRAMに似ています。アプリケーションで使用可能な内部ストレージの量はデバイスによって異なりますが、1MB未満に抑えることをお勧めします。データは、そのファイルパスを介して参照されます。

外部ストレージはSDCardストレージを指すだけでなく、ハイエンドの携帯電話では、これはGalaxy NexusやS2などの内部マウント可能なストレージを意味する場合があります)。これは、アプリケーションで解析する大きなビデオファイル、高解像度画像、および20メガバイトのテキストファイルを保存する場所です。これは、SDカードを交換した場合にデバイス間で共有したいデータを保存する場所でもあります。データは、そのファイルパスを介して参照されます。

SQLite Databasesは、必要なものを通常のデータベースに格納する場所です-テーブル、行、列に整理する利点があります。 UIにリストとして表示するものに最適です-最良の例は、CursorAdapterとして知られている素晴らしい発明です。ここに保存されたデータは、デバイスの再起動時にも保持され、アプリのアンインストールで削除されます。 ContentProviderに接続すると、sqlite dbを使用してアプリケーション間でデータを共有することもできます。 Cursor を使用してデータにアクセスします。SQLステートメントを実行しているようにメソッドを呼び出すことができます。

ネットワーク接続は実際にはデータ保存技術ではありませんが、デバイスがインターネットに接続されている場合、特定のユーザーのデータを永続化する方法になります何らかの認証。アプリが必要とするたびにデータをダウンロードするか、1回限りのデータ同期を行うかでバランスを取る必要があります。これにより、最終的に上記の別のストレージオプションが使用されます。

16
josephus

共有設定はキー/値のペアであり、それ以上のものではありません。したがって、発言者、学生、および彼らのテストスコアを追跡したい場合、それは実際にはうまく機能しません。

データベースはまさにそれ、データベースです。ジョブを完了するために必要な数の列(およびテーブル)を定義できます。

アプリの設定の場合は、共有設定を使用します(私が考えることができるほとんどすべての設定は、その方法で行うことができます)。

4
Barak