0

我正在审查一个学生的程序,该程序在 Activity 中有这样的代码:

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

这显示了文本“再见”,这最初是一个惊喜。我假设发生这种情况是因为对 show() 的调用仅将显示 Toast 实例的请求排队并在实际显示之前返回。对 setText("Goodbye") 的调用会在实例显示之前对其进行变异。

两个问题:

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

1 回答 1

3

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

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

它围绕一个 Toast 列表同步,因此一次只显示一个 Toast - 如果调用多个 Toast.show() 然后以设定的持续时间依次显示它们,则需要这样做。

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

于 2011-03-07T22:45:21.567 回答