0

アクティビティ内に次のようなコードが含まれている学生のプログラムを確認していました。

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

これにより、「さようなら」というテキストが表示されましたが、最初はかなり驚きました。これは、show() の呼び出しが単に Toast インスタンスを表示する要求をキューに入れ、実際に表示される前に戻るために発生したと思います。setText("Goodbye") の呼び出しは、表示される前にインスタンスを変更します。

2 つの質問:

  1. 私の解釈は正しいですか?
  2. Toast ミューテーションが存在する場合にシリアル セマンティクスを確保する最善の方法は何ですか?
4

1 に答える 1

3

疑わしい場合は、ソースに相談することをお勧めします。

Toastは内部で静的参照を使用し、aが呼び出されるたびにそのメソッドINotificationManagerを呼び出します。enqueueToastToast.show()

トーストのリストを同期して、一度に1つのトーストのみが表示されるようにします。これは、複数のToast.show()が呼び出され、設定された期間で次々に表示される場合に必要です。

Toasts参照はキューに入れられるため(実際にはToasts内部クラスTNは)、呼び出すとsetText()、キューに入れられたToastが変更されます。

于 2011-03-07T22:45:21.567 に答える