如何使用Toast确保串行语义?

时间:2011-03-07 22:20:10

标签: android synchronization toast

我正在审核学生的计划,该计划在活动中有这样的代码:

Toast toast = Toast.makeText(this, "Hello", Toast.LENGTH_LONG);
toast.show();
toast.setText("Goodbye");

这显示了“Goodbye”的文字,这最初是一个惊喜。我假设发生这种情况是因为对show()的调用只是将请求显示Toast实例并在实际显示之前返回。对setText(“Goodbye”)的调用会在实例显示之前改变它。

两个问题:

  1. 我的解释是否正确?
  2. 在Toast突变存在的情况下,确保串行语义的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

如有疑问,最好咨询来源。

Toast内部使用INotificationManager的静态引用,并在每次调用enqueueToast时调用Toast.show()方法。

它围绕一个Toasts列表进行同步,以便一次只显示一个Toast - 如果调用了多个Toast.show(),则需要这个Toast.show()然后以它们的设置持续时间一个接一个地显示它们。

由于Toasts引用已入队(实际上是Toasts内部类TN),因此调用setText()会更改已入队的Toast。