【问题标题】:When would SharedPreferences apply() and commit() fail?SharedPreferences apply() 和 commit() 什么时候会失败?
【发布时间】:2015-10-29 18:17:49
【问题描述】:

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

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

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

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

    【讨论】:

    • 好的,谢谢,现在更清楚了。这是否与您的整体手机可用内存有关,还是更像是专门分配给此应用程序的一块内存?我只是在徘徊,如果您的手机内存已满,则更有可能失败。
    • 这将是用户 /data 分区的磁盘利用率,其中存储了 APK 和应用程序私有数据。根据设备(我认为),这可能是与“内部存储”的共享分区,即照片和东西。 AFAIK,没有每个应用程序的限制。
    猜你喜欢
    • 2011-08-23
    • 2015-08-09
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多