Android toast show()方法不再显示相同的toast

时间:2018-06-01 12:55:57

标签: android

我曾经在几秒钟内每隔1秒在一个创建的toast上调用show()方法,以获得一个在屏幕上停留超过LENGTH_LONG的toast。

(类似于Android SDK keep Toast from fading away

注意:吐司文字会在显示时定期更改。

不幸的是,它不再适用于Android 8.0:吐司现在在大约4秒后消失。看起来只有第一次调用show()才有效,所有后续调用都没有效果。

我知道Toast的预期行为不是留在屏幕上,但在转移到另一个解决方案之前,我只是想检查这是否是Android 8.0的预期行为?可能与Toast叠加攻击漏洞有关?

2 个答案:

答案 0 :(得分:0)

Android已采取措施防止恶意吐司覆盖,这可能诱使用户授予不必要的权限或运行其他不需要的代码。因此,阻止显示持久性图标是有道理的。

但是,我也遇到了一个关于不良文本和混合效果的问题。在Android Oreo中Toast讨论了here

因此,似乎在某些时候Oreo允许后续的Toast次呼叫,它可能不是默认行为。

答案 1 :(得分:0)

由于Android 7.1.1每个非系统包一次只能排队一个Toast。请参阅提交:

https://android.googlesource.com/platform/frameworks/base/+/4ee785b698211b5ccce104e226b073ffbb12df55

此外,即使您绕过Toast机制并直接添加TYPE_TOAST窗口,您最终也会遇到一个"错误的令牌异常"如果您一次多次添加TYPE_TOAST窗口。这是为了强制执行以下策略:吐司窗口只能在有限的时间内显示(准确地说是3.5秒)。

https://android.googlesource.com/platform/frameworks/base/+/dc24f93%5E%21/

(请注意对WindowManagerService.java的更改。WindowManagerGlobal.ADD_DUPLICATE_ADD的返回会导致异常被抛到上一级。

是的,行为是有目的的。