codeegginterviewgroup / CodeEggDailyInterview

码个蛋每日面试题
395 stars 55 forks source link

如何优雅的使用 SharedPreferences 存储?你有哪些经验? #179

Open kukyxs opened 4 years ago

kukyxs commented 4 years ago

SharedPreferences 中不要存放大的键值对,因为会占用太多内存、引起 UI 卡顿及内存抖动等问题。在进行 SharedPreferences 数据持久时应该对持久化数据进行分类多 SharedPreferences 文件存储(譬如同一功能相关的放一个文件,或者按照读写频率及大小进行文件拆分),因为文件越大读取越慢,所以分类存储相对会好很多。对于频繁修改尽量做到批量一次性提交,尽量不要多次 edit 和 commit 或者 apply。不要直接用其进行跨进程读写操作,因为 SharedPreferences 不是进程安全的(MODE_MULTI_PROCESS 标记只是保证了在 API 11 以后如果内存中已经存在该 SharedPreference 则重性读一次文件到内存而已),如果要进行跨进程读写保证进程并发安全则建议使用 ContentProvider 对 SharedPreferences 进行包装或者采用其他 AIDL 等方式存储实现