0

アプリケーションを初めて実行するときに、約 200 の共有設定を設定しているアプリケーションがあります。最初は onCreate メソッドから呼び出してすべての設定をロードしていました

SharedPreferences pref = getSharedPreferences(CALC_PREFS, MODE_PRIVATE);
settingsEditor = prefs.edit();
settingsEditor.putString("Something", "");
....
settingsEditor.commit();

そして、それはうまく機能し、かなり迅速に機能します。次に、これらの設定にアクセスする4つの異なるアクティビティがあるため、共有設定ですべての作業を処理する抽象アクティビティクラスを持つようにアプリケーションを再設計しました。

public abstract class AnActivity extends Activity{

// Shared Preference string
private static final String CALC_PREFS = "CalculatorPrefs";
// Editor to customize preferences
private Editor settingsEditor;
// Shared preference
private SharedPreferences prefs;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    prefs = getSharedPreferences(CALC_PREFS, MODE_PRIVATE);
    settingsEditor = prefs.edit();
}

protected void addPref(String key, String value){
    settingsEditor.putString(key, value).commit();
}

protected void addPref(String key, int value){
    settingsEditor.putInt(key, value).commit();
}
//other methods were not posted    
}

私の主な活動は「AnActivity」クラスを拡張していません。ただし、新規インストールでアプリケーションを実行したり、共有設定にアクセスしようとしたりすると、すべてをインスタンス化するのに 10 秒以上かかります。

クリーンで効率的な方法でデフォルト値を設定するにはどうすればよいですか? 設定を処理するための抽象クラスを作成すると、getSharedPreferences を手動で呼び出すよりも多くのオーバーヘッドが発生しますか?

4

1 に答える 1

1

設定を追加するたびにコミットしていますか? これはおそらくあなたの問題です。各エントリのコミットは非常にコストがかかる可能性があり、プットをまとめて一度コミットします。

デフォルト値を指定する必要がない場合は、代わりにいつでも clear() を使用できます

http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#clear%28%29

于 2012-09-28T15:51:00.563 に答える