34
SharedPreferences Anti Pattern

Shared Preferences Anti Pattern

Embed Size (px)

Citation preview

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