Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Shared Preferences Anti Pattern

1,806 views

Published on

Android 開発アンチパターン勉強会 #1 LT
Shared Preferences Anti Pattern

Published in: Technology
  • Be the first to comment

Shared Preferences Anti Pattern

  1. 1. SharedPreferences Anti Pattern
  2. 2. とあるSさん 岡野さんは System破壊する方法たくさん 知ってますからね。 期待してください!
  3. 3. とあるKさん 期待しておきます! Androidの壊し方ってのも 面白そうですね!w
  4. 4. そんな話 できるわけねーだろ! 怒られちゃうから…
  5. 5. About Me Shinobu Okano ( 岡野忍) SERAKU Co.,Ltd. @operandoOS Android/ Ruby on Rails Dart/ Firefox OS/ Play Framework Twenty two years old http://hack-it-iron.hatenablog.com/
  6. 6. みんなちがうから、 世界はたのしい Androidエンジニアです
  7. 7. ゆるびぃ会 http://yuruby.github.io/ Community 女子会みたいなもの ※女子はいません
  8. 8. Do you use the SharedPreferences?
  9. 9. SharedPreferences Anti Pattern •getSharedPreferencesが色んなところに書いてある •何でもかんでも一つのPreferenceに保存する •セキュアじゃないMODE使ってる •Key名がベタ書き→定数化してない •グローバルな変数格納用に使用される などなど・・・
  10. 10. SharedPreferences Best Practice Utilを作れ!
  11. 11. SharedPreferences Anti Pattern •getSharedPreferencesが色んなところに書いてある •何でもかんでも一つのPreferenceに保存する •セキュアじゃないMODE使ってる •Key名がベタ書き→定数化してない •グローバルな変数格納用に使用される などなど・・・
  12. 12. SharedPreferences Best Practice Key名は定数化
  13. 13. SharedPreferences Anti Pattern •getSharedPreferencesが色んなところに書いてある •何でもかんでも一つのPreferenceに保存する •セキュアじゃないMODE使ってる •Key名がベタ書き→定数化してない •グローバルな変数格納用に使用される などなど・・・
  14. 14. SharedPreferences Best Practice getDefault SharedPreferencesは 極力使わない
  15. 15. SharedPreferences Anti Pattern •getSharedPreferencesが色んなところに書いてある •何でもかんでも一つのPreferenceに保存する •セキュアじゃないMODE使ってる •Key名がベタ書き→定数化してない •グローバルな変数格納用に使用される などなど・・・
  16. 16. もう Utilクラス 作るの疲れたぜ
  17. 17. もう 定数 作るの疲れたぜ
  18. 18. Garum https://github.com/operando/Garum
  19. 19. Annotation@Style SharedPreferences
  20. 20. ん? どこかで聞いたこと あるなー
  21. 21. Active record style SQLite persistence for Android
  22. 22. Active record style SQLite persistence for Android
  23. 23. パクリだ。
  24. 24. So what?
  25. 25. Support Version API Level 9 - API Level 21
  26. 26. How to use -Initialize- publicclassMyApplicationextendsApplication { @Override publicvoidonCreate(){ super.onCreate(); Garum.initialize(getApplicationContext()); } }
  27. 27. How to use -Model- @Pref(name ="app_status") publicclassAppStatusextendsPrefModel { @PrefKey publicString appName; @PrefKey publicintstartupCount; @PrefKey publicbooleanshowNotification; }
  28. 28. How to use -Support Types- int long float boolen String Set<String>
  29. 29. How to use -SupportTypeSerializer- Date
  30. 30. How to use -Support Modes- MODE_PRIVATE MODE_WORLD_READABLE MODE_WORLD_WRITEABLE MODE_MULTI_PROCES
  31. 31. How to use -Support Modes- deprecatedin API level 17 MODE_WORLD_READABL MODE_WORLD_WRITEABLE
  32. 32. How to use -Save- publicvoidonSave(View v){ AppStatus appStatus =newAppStatus(); appStatus.appName="Garum"; appStatus.startupCount=10; appStatus.showNotification=true; appStatus.save(); }
  33. 33. How to use -Save- <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <stringname="appName">Garum</string> <intname="startupCount"value="10"/> <booleanname="showNotification"value="true"/> </map> /data/data/<package name>/shared_prefs/app_status.xml
  34. 34. Thank you

×