我正在使用SharedPreferences在我的应用程序中保留用户的数据。
我知道commit()
和apply()
方法之间的区别,但我注意到commit()
如果新值已成功写入持久存储,则{em>返回 {1}}没有。
导致apply()
方法返回false或commit()
方法失败的原因是什么?
答案 0 :(得分:5)
让我们来看看the source code for commit():
public boolean commit() {
MemoryCommitResult mcr = commitToMemory();
SharedPreferencesImpl.this.enqueueDiskWrite(
mcr, null /* sync write on this thread okay */);
try {
mcr.writtenToDiskLatch.await();
} catch (InterruptedException e) {
return false;
}
notifyListeners(mcr);
return mcr.writeToDiskResult;
}
换句话说,如果线程在等待磁盘写入完成时被中断,或者由于某种原因磁盘写入失败(很可能是因为磁盘已满),commit()
将返回false。