- apply是异步执行磁盘写入,commit是在当前线程执行磁盘写入。因此不要在主线程commit。
- 每执行一次apply会将这次磁盘写入封装成一个runnable提交给只有一个线程的线程池执行,而在ActivityThread#handleStopActivity中会等待这些runnable全部执行完。因此尽量将多次apply合成一次。
- ContextImpl#getSharedPreferences虽然会异步读取xml文件,但是每次getString时会同步等待xml加载到内存。因此,不要在sp存储大value,会增加sp的加载时间,从而可能引起界面卡顿。
- ContextImpl#getSharedPreferences加载完后会保存在一个静态的ArrayMap中,这意味着用sp存储大value会永久性的占用更多的内存。因此一方面是要简历避免用sp存储大value,另一方面是要注意读取频繁的key和不易变动的key尽量不要放在一个File中,影响速度。
- 虽然sp有个跨进程的flag ,FLAG——MODE_MULTI_PROCESS,但是这玩意不靠谱,跨进程操作读写还是老老实实用contentProvider。
网友评论