????????android??????????????????SharePreference???????????????????????洢?????????????ClassCastException?? String can not be cast to Boolean. ???????Щ?????д?′??????????
????????????????
????public static void write(KeySet key?? String value) {
????PreferenceUtils instance = new PreferenceUtils();
????instance.editor.putString(key.name()?? value);
????instance.editor.apply();
????}
??????????д??????????ε???????????????????????????String????????????Boolean??????????????Boolean??????????= =
????????????????????????????????????????????????????????????????????????棬??????????????(?3?)?
????????
??????????????????????????????API????ɡ?????????????д???Щ???????????????????????????????
????????????????????????????Щ??ɡ?
public void apply() {
final MemoryCommitResult mcr = commitToMemory();
final Runnable awaitCommit = new Runnable() {
public void run() {
try {
mcr.writtenToDiskLatch.await();
} catch (InterruptedException ignored) {
}
}
};
QueuedWork.add(awaitCommit);
Runnable postWriteRunnable = new Runnable() {
public void run() {
awaitCommit.run();
QueuedWork.remove(awaitCommit);
}
};
SharedPreferencesImpl.this.enqueueDiskWrite(mcr?? postWriteRunnable);
// Okay to notify the listeners before it's hit disk
// because the listeners should always get the same
// SharedPreferences instance back?? which has the
// changes reflected in memory.
notifyListeners(mcr);
}
????????apply?????????????е? commitToMemory() ???????д??????У??????д???????????д????????? enqueueDiskWrite ??????д???洢?豸?У???????????????
???????????????????? putString ??????????????? commitToMemory() ??д????檔
???????????2?????? commitToMemory() ????????????????????( ω )?
// Returns true if any changes were made
private MemoryCommitResult commitToMemory() {
...
for (Map.Entry<String?? Object> e : mModified.entrySet()) {
String k = e.getKey();
Object v = e.getValue();
if (v == this) {  // magic value for a removal mutation
if (!mMap.containsKey(k)) {
continue;
}
mMap.remove(k);
} else {
boolean isSame = false;
if (mMap.containsKey(k)) {
Object existingValue = mMap.get(k);
if (existingValue != null && existingValue.equals(v)) {
continue;
}
}
mMap.put(k?? v);
}
mcr.changesMade = true;
if (hasListeners) {
mcr.keysModified.add(k);
}
}
...
}
??????????????????????????????????£????????????£????????д?? mcr ?н?????????????????????????κ???????????
???????
??????ε??????????е?????????????????????????????????????????????????д????????????е??
??????????????????????????е???仰?? >???????????????????????п????????????
???????????????????????????÷??????????д???????????????????????????????????????????
?????????????????????????????????????????????1. д???????????2. ??????????
???????
???????д??????????????????????????????????????????????????????????????????????????С?
??????????????????????????飬?????????????????????????
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences?? String _key) {
KeySet key = KeySet.valueOf(_key);
boolean enable = PreferenceUtils.read(key?? false);
if (enable) {
doSomething();
} else {
doOtherthing();
}
}
??????????????????????κε????????????????boolean????????????= =
???????
?????????????????????????????????????????
???????????????????????boolean????????????????????????????????????????????????Stringд???????????
?????????????????????????????????????????????????
???????????????侲???????????catch?????StackTrace????????????????????????????????
????????????????????????????????????Υ?????????????ο????????????????
?????????????????????????????????к?????????????Ч?????????????κδ????????????