最近项目中的 Toast 提示比较频繁的报这个错:IllegalStateException: view has already been added to the window manager 也没有具体定位业务代码,这就不太好找问题,没法复现,就不好解决。
所以是时候看下 Toast 源码了
[Android] Toast问题深度剖析(一)
[Android] Toast问题深度剖析(二)
Android Toast 两个 Crash
我也是看别人的源码分析,这里感谢以上作者,我觉得分析的很透彻,也有解决方案,很有帮助。
原因分析
过完上面的源码分析,再来看看项目中的使用。为了避免重复创建 toast,一般都会全局定义一个,然后在使用的时候改变其文本内容。这里实现的方式可以是单例模式,或者静态变量。这样使用就会导致 mNextView 始终是持有同一个对象的,也就可能会出现这个异常了。至于最近出现的比较频繁,有可能跟项目业务代码有关,导致消息容易出现阻塞。
如何解决
看完源码我们知道,这个问题 Android 它没有 catch 的,我们在外面也 catc