Posted at

【Android】データの保存と共有について

Androidアプリにおけるデータの保存と共有についてのまとめ。


  • 内部ストレージ(アプリPrivateなfileの保存領域)

  • 外部ストレージ(SDカードなどの共有されたfileの保存領域)

  • SharedPreferences(アプリPrivateなdataの保存領域)

  • データベース(アプリPrivateな構造を持つdataの保存領域)


他のアプリとの共有


Except for some types of files on external storage, all these options are intended for app-private data—the data is not naturally accessible to other apps.

If you want to share files with other apps, you should use the FileProvider API.


他のアプリとファイルを共有したい場合は、FileProviderを使う


If you want to expose your app's data to other apps, you can use a ContentProvider.


他のアプリとデータを共有したい場合は、ContentProviderを使う


内部ストレージ


  • 他のアプリからはアクセスできない

  • アプリ固有のデータを保存するのに適する

  • Androidシステムがアプリ毎に固有のdirectoryを用意する

  • アプリを削除すると内部ストレージ内のデータも削除される

  • アプリを削除してもデータを残したい場合はMediaStoreに保存する

内部ストレージの保存方法

https://developer.android.com/training/data-storage/files.html#WriteInternalStorage


内部キャッシュ


  • 一時的なデータの保管に使う

  • 内部ストレージの容量が少なくなるとAndroidシステムが削除するため、多くても1MBまでに留める

内部キャッシュの保存方法

https://developer.android.com/training/data-storage/files.html#WriteCacheFileInternal


外部ストレージ


  • 他のアプリと共有したいデータの保存に使う(スクショやDLしたファイル等)

  • アプリを削除しても保存される

  • 常にアクセス可能とは限らない。SDカードなどがないと不可。

  • 事前にアクセスできるか確認する必要がある。

外部ストレージの保存方法

https://developer.android.com/training/data-storage/files.html#WriteExternalStorage


SharedPreferences


  • データの規模が小さくて構造的なデータではないデータを保存するのに適する


    • 構造的なデータではない?→ BooleanFloatIntLongString



  • 取得と更新ができる

  • key-value形式で記述されたxmlファイルとしてアプリ内に保存される

  • SharedPreferencesのインスタンス生成時にxmlファイルの名前を任意に設定できる

  • アプリを削除するとデータも削除される

  • アプリ全体で共有されるSharedPreferencesとActivityに紐づくSharedPreferencesがある

SharedPreferencesの保存方法

https://developer.android.com/training/data-storage/shared-preferences.html


アプリ内データベース


  • AndroidではSQLite Databaseがサポートされている

  • SQLiteで直接操作することもできるが、よりSQLiteが使いやすくなるRoomというライブラリが用意されている

Roomの使い方(Google推奨)

https://developer.android.com/training/data-storage/room/index.html

SQLiteで直接操作する方法

https://developer.android.com/training/data-storage/sqlite.html

今回は以上です。