美文网首页
Android SharedPreferences引起Anr问题

Android SharedPreferences引起Anr问题

作者: 在岁月中远行 | 来源:发表于2022-08-29 00:01 被阅读0次

1 getValue的时候可能导致线程阻塞或ANR

在我们的SharedPreferencesImpl的构造函数里,会启动一个子线程去加载磁盘文件,把xml文件转换成map对象,如果文件很大或者线程调度没有马上去启动这个线程的话,那么加载这个操作需要一段时间才能执行完成。

而假如我们刚好初始化的时候后马上去getLong(String key, long defValue)或者

getFloat(String key, float defValue),getBoolean(String key, boolean defValue)等等

它们这些获取值的方法有个awaitLoadedLocked();方法来校验是否需要阻塞外部线程的

目的就是确保取值操作前一定是执行完成了文件(xml)转换成内存map的转换成功,最后在磁盘加载完成时才会notifyAll操作,把我们外部读取value的线程给唤醒。

上述的操作在我们复杂的APP复杂场景下会经常出现的,磁盘加载并阻塞外部获取值的时间会比较长,引起anr。

相关文章

网友评论

      本文标题:Android SharedPreferences引起Anr问题

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