SharedPreferences的apply()和commit()方法什么时候会失败?

7
我在我的应用程序中使用SharedPreferences来持久化用户数据。 我知道commit()apply()方法之间的区别,但是我已经注意到commit()会返回true如果新值成功写入持久性存储apply()则不会。 那么,是什么原因导致commit()方法返回false或者apply()方法失败呢?
1个回答

6

让我们来看一下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。

好的,谢谢。现在更清楚了。这是否与你手机的可用内存有关,还是更像是专门分配给这个应用程序的一块内存?我只是在想如果你的手机内存已满,它更可能会失败。 - Benjamin Fell
1
这将是用户/data分区的磁盘利用率,其中存储了APK和应用程序私有数据。根据设备(我想),这可能是与“内部存储”共享的分区,即照片等内容。据我所知,没有每个应用程序的限制。 - Snild Dolkow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,