たとえば、いくつかの設定項目が追加または削除された場合、新しい設定構造でアプリケーションが更新されると、Androidは既存の設定データをどのように処理しますか?新しいバージョンの設定構造が変更された場合、Androidのユーザー設定の既存のデータはどうなりますか?
この基本的な質問は申し訳ありませんが、私の勤勉な検索と読解は答えを見つけることができませんでした。
たとえば、いくつかの設定項目が追加または削除された場合、新しい設定構造でアプリケーションが更新されると、Androidは既存の設定データをどのように処理しますか?新しいバージョンの設定構造が変更された場合、Androidのユーザー設定の既存のデータはどうなりますか?
この基本的な質問は申し訳ありませんが、私の勤勉な検索と読解は答えを見つけることができませんでした。
共有設定は、xmlファイルのdata/data/your.application.package/shared_prefs/
フォルダに保存されます。ファイル名はyour.application.package_preferences.xml
です。
共有設定を取得するときは、Context.getSharedPreferencesメソッドを呼び出します。 SharedReferences
オブジェクトを作成し、SharedReferences.startLoadFromDiskメソッドを呼び出します。
この方法を開くと、環境設定(mFile
)のxmlファイルが解析され、環境設定がメモリストレージ(map
)に読み込まれることがわかります。
BufferedInputStream str = new BufferedInputStream(new FileInputStream(mFile), 16*1024);
map = XmlUtils.readMapXml(str);
その後、あなたは常にメモリからあなたの嗜好を読みます。より正確には変数private Map<String, Object> mMap
からです。 また、アプリケーションはstartReloadIfChangedUnexpectedlyメソッドを呼び出すことができ、基礎となるファイルが変更されている場合は解析され、新しいHashMapが作成されます。あなたの質問に関しては
、次のような場合があります。
あなたは新しいバージョンで設定項目を追加しました。次に、2番目のパラメータとして指定されたデフォルト値が返されます。注意:属性android:defaultValueは使用されないので注意してください。
String v = (String)mMap.get(key); // not found => v = null
return v != null ? v : defValue; // return defValue
あなたは新しいバージョンで設定項目を削除しました。 xmlファイルとmap
オブジェクトにはいくつかの冗長データが含まれますが、ユーザーが次に環境設定を保存するときに修正されます。
設定項目のキーを、使用されていないキーに変更しました。デフォルト値が返されます。 p.1と同じ結果です。
あなたが(例えば、キーpref1_key
で)1つの設定項目を削除し、それが(pref2_key
からpref1_key
に)最初の項目を参照するように別のアイテムのキーを変更しました。次に、2番目の設定項目は最初の項目の値を持ちます。
(Integer)mMap.get(key);
。しかし、例えばEditTextPreferenceをListPreferenceに変更することができます。これは、両方ともString型を持つためです。はたぶん、いくつかのより多くのテストケースがありますが、これまでのところ、私は唯一の5
また、ここまで作った好みの例はListPreference、EditTextPreferenceとCheckBoxPreferenceを持つファイルです:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="pref_theme_key">THEME_LIGHT</string>
<string name="pref_homepage_key">test</string>
<boolean name="pref_display_name_key" value="true" />
</map>
アプリが新しい設定構造で更新されると、Androidは既存の設定データをどのように処理しますか?
"設定構造"が意味することは不明です。
SharedPreferences
は永続的であると考えることができます。HashMap
さまざまなキーの下にさまざまな値を格納し、後でそれらを戻すことができます。 Androidは実際に何かを保存するまで、先祖のキーまたはそれらのキーの下に格納される値のタイプに関する知識がありません。
私の推測では、「環境設定構造」とは、「XMLの設定画面定義」を意味します。
あなたは新しい設定を追加した場合、Androidは好みの周りのすべてに沿ってきましたが、あなたが削除した場合、ユーザは
前に、これらの設定を設定することがなかったかのように、通常はそれらを、処理します。その場合、あなたが以前に使用していた設定は、あなたがそれを取り除くことを選択しない限り、古いデータはそのまま残っています。 、論理的に同じものについてkeyA
をkey1
に置き換えます)、好みのAndroidは、全く新しい好みとしてkey1
を扱います、そしてあなたは、キーの変更を反映するために、あなたのSharedPreferences
データを更新するために、どこかにあなたのコード内で知性を配置する必要があります、あなたがそう
を選択した場合は、noありSharedPreferencesOpenHelper
相当のSQLiteOpenHelper
を使用して、「スキーマのバージョン」の設定を管理し、データの移行を支援します。頻繁に変化する「嗜好構造」を管理するのに役立つと思うなら、そのようなシステムを作成することもできます。
あなたが望むならば、あなたはDDMSからprefs XMLファイルを取り出して自分自身を探すことができます – mango