AndroidにおけるSharedPreferencesとPreferencesの使い分け

Androidアプリケーション開発において、設定情報やユーザーの選好を永続化するためには、SharedPreferencesがよく利用されます。この記事では、getSharedPreferencesメソッドとgetPreferencesメソッドの違いについて説明し、それぞれの適切な使用方法を実装例とともに紹介します。

これらのメソッドは、データの保存と読み込みを行うために共通のAPIを提供していますが、用途によって使い分ける必要があります。以下に、両者の特徴と実装例を示します。

まず、SharedPreferencesの操作をカプセル化したクラスを作成します。このクラスでは、ファイル名を指定する必要があるgetSharedPreferencesと、Activityに紐づくgetPreferencesの両方に対応するメソッドを提供します。

package com.example.sharedpreferences;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;

public class PreferenceManager {
    private static final String PREF_NAME = "app_settings";
    
    /**
     * SharedPreferencesを使用して設定を保存します。
     * 複数の設定ファイルが必要な場合に適しています。
     */
    public boolean saveSetting(Context context, String key, String value) {
        SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString(key, value);
        return editor.commit();
    }
    
    /**
     * SharedPreferencesから設定を読み込みます。
     */
    public String loadSetting(Context context, String key, String defaultValue) {
        SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
        return prefs.getString(key, defaultValue);
    }
    
    /**
     * Activityに紐付いたPreferencesを使用して設定を保存します。
     * アプリ全体で1つの設定ファイルのみが必要な場合に適しています。
     */
    public boolean saveActivitySetting(Activity activity, String key, String value) {
        SharedPreferences prefs = activity.getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString(key, value);
        return editor.commit();
    }
    
    /**
     * Activityに紐付いたPreferencesから設定を読み込みます。
     */
    public String loadActivitySetting(Activity activity, String key, String defaultValue) {
        SharedPreferences prefs = activity.getPreferences(Context.MODE_PRIVATE);
        return prefs.getString(key, defaultValue);
    }
}

次に、上記のPreferenceManagerクラスを使用して、実際に設定を保存・読み込みするサンプルコードを示します。

void testSettingsSaving(Activity activity) {
    PreferenceManager manager = new PreferenceManager();
    
    // 既存の設定値を取得
    String currentValue = manager.loadSetting(this, "server_ip", "127.0.0.1");
    Log.d("SettingsTest", "Current IP: " + currentValue);
    
    // 新しい値を保存
    manager.saveSetting(this, "server_ip", "192.168.1.100");
    currentValue = manager.loadSetting(this, "server_ip", "127.0.0.1");
    Log.d("SettingsTest", "Updated IP: " + currentValue);
    
    // Activity固有の設定も試す
    String activityValue = manager.loadActivitySetting(activity, "activity_setting", "default");
    Log.d("SettingsTest", "Activity setting: " + activityValue);
    
    manager.saveActivitySetting(activity, "activity_setting", "updated_value");
    activityValue = manager.loadActivitySetting(activity, "activity_setting", "default");
    Log.d("SettingsTest", "Updated activity setting: " + activityValue);
}

ActivityのonCreateメソッド内で上記テストメソッドを呼び出します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    testSettingsSaving(this);
}

実行結果として、以下のようにログが出力されます。これは、SharedPreferencesの永続化機能が正しく動作していることを示しています。

D/SettingsTest: Current IP: 127.0.0.1
D/SettingsTest: Updated IP: 192.168.1.100
D/SettingsTest: Activity setting: default
D/SettingsTest: Updated activity setting: updated_value

以上のように、getSharedPreferencesは複数の設定ファイルを管理する場合に適し、getPreferencesはActivity単位での設定保持に最適です。アプリの設計に応じて適切なメソッドを選択することが重要です。

タグ: Android SharedPreferences Preferences 設定保存 データ永続化

6月16日 23:51 投稿