ユーザー情報などのデータの永続化の方法について調べたメモ
例えばSNSやゲームにおけるユーザー名とかの基本情報など、頻繁に利用する情報はどこかに出し入れしやすい場所に保存して置きたい。
そんな感じのAndroidにおけるデータの永続化について、セキュリティ面等も含め、カンタンに調査検討したメモ。
情報元はここ。
http://developer.android.com/guide/topics/data/data-storage.html
方法としては以下5つ。
- Shared Preferences
- Internal Storage
- External Storage
- SQLite Databases
- Network Connection
Shared Preferences
SharedPreferencesというクラスが存在し、それを用いてkey-value形式で、プリミティブ型のデータを保存することができる。
ちょっと気になるのが原文の
This data will persist across user sessions (even if your application is killed).
というところで、アプリが終了してもデータが維持される、とは明記してあるけど「ユーザーセッション間で永続化される」というところの意味がわからなかった。ユーザーセッションって何?ICS4.2からマルチユーザーがサポートされたけど、その辺が関係してるのかな?
デフォルトでは、アプリごとにアクセス権は管理され、アプリが削除されたら関連データも削除される。
※アプリ間でRead/Writeできる設定はヤバすぎてAPI17でオワコン指定されるって書いてあった。
ググればわかるだろう、どこかにxmlで保存されているらしい。どっちにせよroot化すれば見られることに変わりはない。
Internal Storage
デバイスの内部ストレージにファイルとして保存する。デフォルトではアプリケーションごとにアクセス権が管理され、別アプリからアクセスされる、ということはない。※が、root化されたらなんでもアリだということは忘れてはいけない。
アプリが削除されたら、ここのデータも一緒に削除される。
External Storage
SDカードなどの外部ストレージに保存する。などっていったけど、現状ほとんどがSDカードだと思う。けれどもけれども、デバイスによっては、デバイス内に外部領域的なものがあるのもあるらしいので、SDカードじゃない場合もあるってことを忘れてはいけない。あと、そもそもSDカードがないかもしれないことも忘れてはいけない。
まあ、SDカードとかなんでデータの中身はお手軽に確認することができる。
Network Connection
インターネッツでサーバサイドに保存するってことらしい。省略。
ということで、結局root化されたらどうとかってのは別で考えるとして、プリミティブ型でよければShared Preferences使っておくのがカンタンそうでよさそうだと思いました。