SharedPreferences apply()和commit()何时失败?

时间:2015-10-29 18:17:50

标签: android sharedpreferences

我正在使用SharedPreferences在我的应用程序中保留用户的数据。 我知道commit()apply()方法之间的区别,但我注意到commit()如果新值已成功写入持久存储,则{em>返回 {1}}没有。

导致apply()方法返回false或commit()方法失败的原因是什么?

1 个答案:

答案 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。