题记
Toast
作为 Android
系统中最常用的类之一,由于其方便的api设计和简洁的交互体验,被我们所广泛采用。但是,伴随着我们开发的深入,Toast
的问题也逐渐暴露出来。本文章就将解释 Toast
这些问题产生的具体原因。 本系列文章将分成两篇:
- 第一篇,我们将分析
Toast
所带来的问题 - 第二篇,将提供解决
Toast
问题的解决方案
(注:本文源码基于Android 7.0)
1. 异常和偶尔不显示的问题
当你在程序中调用了 Toast
的 API
,你可能会在后台看到类似这样的 Toast
执行异常:
android.view.WindowManager$BadTokenException Unable to add window -- token android.os.BinderProxy@7f652b2 is not valid; is your activity running? android.view.ViewRootImpl.setView(ViewRootImpl.java:826) android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:369) android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94) android.widget.Toast$TN.handleShow(Toast.java:459)
另外,在某些系统上,你没有看到什么异常,却会出现 Toast
无法正常展示的问题。为了解释上面这些问题产生的原因,我们需要先读一遍 Toast
的源码。