4
我正在使用SharedPreferences在用戶的數據中保存我的應用程序。 我知道commit()
和apply()
方法之間的區別,但我注意到commit()
返回如果新值已成功寫入永久存儲器和apply()
沒有。SharedPreferences何時應用()和提交()失敗?
什麼原因可能導致commit()
方法返回false或apply()
方法失敗?
我正在使用SharedPreferences在用戶的數據中保存我的應用程序。 我知道commit()
和apply()
方法之間的區別,但我注意到commit()
返回如果新值已成功寫入永久存儲器和apply()
沒有。SharedPreferences何時應用()和提交()失敗?
什麼原因可能導致commit()
方法返回false或apply()
方法失敗?
讓我們來看看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,如果線程被中斷,而等待磁盤寫操作完成,或如果由於某種原因磁盤寫入失敗(很可能是因爲磁盤已滿)。
好的,謝謝你現在更清楚。這是否必須做你的整體手機可用內存,還是更像是一個專門分配給這個應用程序的內存?如果你的手機內存已滿,更可能失敗,我只是漫遊。 –
這將是存儲APK和應用專用數據的用戶/數據分區的磁盤利用率。根據設備(我認爲),這可能是與「內部存儲」共享的分區,即照片和內容。 AFAIK,沒有每個應用限制。 –