Как обеспечить последовательную семантику с помощью Toast? - PullRequest
0 голосов
/ 08 марта 2011

Я просматривал программу студента, в которой был код, подобный следующему, в Задании:

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

В нем отображался текст «До свидания», что поначалу было довольно неожиданным.Я предполагаю, что это произошло потому, что вызов метода show () просто помещает в очередь запрос на отображение экземпляра Toast и возвращает его до того, как он действительно отобразится.Вызов setText («Goodbye») изменяет экземпляр перед его отображением.

Два вопроса:

  1. Правильно ли мое толкование?
  2. Как лучше всегообеспечить серийную семантику при наличии мутации Toast?

1 Ответ

3 голосов
/ 08 марта 2011

В случае сомнений лучше обратиться к источнику.

Тост внутренне использует статическую ссылку на INotificationManager и каждый раз вызывает enqueueToast метод a Toast.show()* вызывается 1009 *.

Он синхронизируется вокруг списка тостов, так что отображается только один тост за раз - это необходимо, если вызывается несколько Toast.show (), а затем показывает их один за другим сих установленная продолжительность.

Поскольку ссылки на тосты ставятся в очередь (на самом деле это внутренний класс тостов TN), вызов setText() меняет тост в очереди.

...