美文网首页安卓面试
12、SharedPreferences 是线程安全的吗?它的

12、SharedPreferences 是线程安全的吗?它的

作者: 五道杠小学生 | 来源:发表于2019-05-15 17:34 被阅读0次

    1.SharePreferences是线程安全的 里面的方法有大量的synchronized来保障。
    2.SharePreferences不是进程安全的 即使你用了MODE_MULTI_PROCESS 。
    3.第一次getSharePreference会读取磁盘文件,异步读取,写入到内存中,后续的getSharePreference都是从内存中拿了。
    4.第一次读取完毕之前 所有的get/set请求都会被卡住 等待读取完毕后再执行,所以第一次读取会有ANR风险。
    5.所有的get都是从内存中读取。
    6.提交都是 写入到内存和磁盘中 。apply跟commit的区别在于
    apply 是内存同步 然后磁盘异步写入任务放到一个单线程队列中 等待调用。方法无返回 即void
    commit 内存同步 只不过要等待磁盘写入结束才返回 直接返回写入成功状态 true or false
    7.从 Android N 开始, 不再支持 MODE_WORLD_READABLE & MODE_WORLD_WRITEABLE. 一旦指定, 会抛异常 。也不要用MODE_MULTI_PROCESS 迟早被放弃。
    8.每次commit/apply都会把全部数据一次性写入到磁盘,即没有增量写入的概念 。 所以单个文件千万不要太大 否则会严重影响性能。
    建议用微信的第三方MMKV来替代SharePreference

    腾讯有一个MMKV是sharedPreferences的优化版,读取写入性能都有大幅提升,但是没有实现sharedPreferences的registerOnSharedPreferenceChangeListener()接口,无法监听值的改变,希望后续能够完善。
    https://github.com/tencent/mmkv

    相关文章

      网友评论

        本文标题:12、SharedPreferences 是线程安全的吗?它的

        本文链接:https://www.haomeiwen.com/subject/hbdmaqtx.html