Shared Preferences Anti Pattern

34
SharedPreferences Anti Pattern

Transcript of Shared Preferences Anti Pattern

SharedPreferencesAnti Pattern

とあるSさん

岡野さんは

System破壊する方法たくさん

知ってますからね。

期待してください!

とあるKさん

期待しておきます!

Androidの壊し方ってのも

面白そうですね!w

そんな話

できるわけねーだろ!

怒られちゃうから…

About MeShinobu Okano ( 岡野 忍 )

SERAKU Co.,Ltd.

@operandoOS

Android / Ruby on Rails

Dart / Firefox OS / Play Framework

Twenty two years old

http://hack-it-iron.hatenablog.com/

みんなちがうから、

世界はたのしい

Androidエンジニアです

ゆるびぃ会

http://yuruby.github.io/

Community

女子会みたいなもの※女子はいません

Do you use the

SharedPreferences?

SharedPreferencesAnti Pattern

• getSharedPreferencesが色んなところに書いてある

• 何でもかんでも一つのPreferenceに保存する

• セキュアじゃないMODE使ってる

• Key名がベタ書き→定数化してない

• グローバルな変数格納用に使用される

などなど・・・

SharedPreferencesBest Practice

Utilを作れ!

SharedPreferencesAnti Pattern

• getSharedPreferencesが色んなところに書いてある

• 何でもかんでも一つのPreferenceに保存する

• セキュアじゃないMODE使ってる

• Key名がベタ書き→定数化してない

• グローバルな変数格納用に使用される

などなど・・・

SharedPreferencesBest Practice

Key名は定数化

SharedPreferencesAnti Pattern

• getSharedPreferencesが色んなところに書いてある

• 何でもかんでも一つのPreferenceに保存する

• セキュアじゃないMODE使ってる

• Key名がベタ書き→定数化してない

• グローバルな変数格納用に使用される

などなど・・・

SharedPreferencesBest Practice

getDefaultSharedPreferencesは

極力使わない

SharedPreferencesAnti Pattern

• getSharedPreferencesが色んなところに書いてある

• 何でもかんでも一つのPreferenceに保存する

• セキュアじゃないMODE使ってる

• Key名がベタ書き→定数化してない

• グローバルな変数格納用に使用される

などなど・・・

もう

Utilクラス

作るの疲れたぜ

もう

定数

作るの疲れたぜ

Garumhttps://github.com/operando/Garum

Annotation@ Style

SharedPreferences

ん?

どこかで聞いたこと

あるなー

Active record style

SQLite

persistence for

Android

Active record style

SQLite

persistence for

Android

パクリだ。

So what?

Support Version

API Level 9-

API Level 21

How to use- Initialize -

public class MyApplication extends Application {

@Overridepublic void onCreate() {

super.onCreate();Garum.initialize(getApplicationContext());

}}

How to use- Model -

@Pref(name = "app_status")public class AppStatus extends PrefModel {

@PrefKeypublic String appName;

@PrefKeypublic int startupCount;

@PrefKeypublic boolean showNotification;

}

How to use- Support Types -

int long float boolen String Set<String>

How to use- Support TypeSerializer -

Date

How to use- Support Modes -

MODE_PRIVATE

MODE_WORLD_READABLE

MODE_WORLD_WRITEABLE

MODE_MULTI_PROCES

How to use- Support Modes -

deprecated in API level 17

MODE_WORLD_READABL

MODE_WORLD_WRITEABLE

How to use- Save -

public void onSave(View v) {AppStatus appStatus = new AppStatus();appStatus.appName = "Garum";appStatus.startupCount = 10;appStatus.showNotification = true;appStatus.save();

}

How to use- Save -

<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map>

<string name="appName">Garum</string><int name="startupCount" value="10" /><boolean name="showNotification" value="true" />

</map>

/data/data/<package name>/shared_prefs/app_status.xml

Thank you