因为getXXX()都是同步的,在主线程调用 get 方法时,同步方法内调用了 wait() 方法,会必须等待
getSharedPreferences()
方法开启的线程读取完数据完毕,才能继续往下执行,会导致主线程阻塞。如果数据量读取的小,并没有什么影响,如果读取的文件较大会导致主线程阻塞。
调用 getSharedPreferences() 方法,最终会调用
SharedPreferencesImpl#startLoadFromDisk() 方法开启一个线程异步读取数据。
(2)SharedPreferences不能保证类型安全
调用 getXXX() 方法的时候,可能会出现 ClassCastException 异常,因为使用相同的 key
进行操作的时候,putXXX 方法可以使用不同类型的数据覆盖掉相同的 key。
(3)SharedPreferences加载的数据会一直留在内存中
通过 getSharedPreferences() 方法加载的数据,最后会将数据存储在静态的成员变量中。 通过静态的 ArrayMap
缓存每一个 SharedPreferences文件,而每个 SharedPreferences文件内容通过