Сколько раз и в какие моменты времени у textView вызовется метод onDraw после нажатия на кнопку button? Какой текст будет отображен? class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setSupportActionBar(toolbar) button.setOnClickListener { view -> textView.text = "First Text" textView.invalidate() textView.text = "Second text" textView.invalidate() textView.text = "Third text" } } }
Ответы на вопрос
После нажатия на button нельзя ожидать три отдельных вызова onDraw() — по одному на каждый invalidate().
Все строки обработчика выполняются последовательно в одном вызове OnClickListener на главном UI-потоке:
KotlintextView.text = "First Text"
textView.invalidate()
textView.text = "Second text"
textView.invalidate()
textView.text = "Third text"
invalidate() не вызывает onDraw() немедленно. Он лишь помечает View как нуждающуюся в перерисовке и планирует отрисовку в ближайшем проходе UI-цикла. Пока обработчик нажатия не завершился, Android не начнёт рисовать экран между этими строками.
Кроме того, присваивание textView.text само по себе обычно приводит к необходимости обновить отображение TextView: меняются текст, измерения или разметка, выполняются requestLayout() и/или invalidate().
Поэтому типичный результат такой:
-
Обработчик клика полностью завершится.
-
Android объединит несколько запросов на перерисовку в один ближайший проход layout/draw, обычно на следующем кадре.
-
onDraw()уtextViewбудет вызван один раз для итогового состояния. -
На экране отобразится:
Third text
Тексты First Text и Second text пользователь, скорее всего, вообще не увидит: они существовали только как промежуточные значения в памяти до первого фактического рисования.
Точное число вызовов onDraw() нельзя гарантировать на уровне этого кода: система может выполнить дополнительные перерисовки из-за layout, анимаций, изменений размеров, перекрытий окна и других событий. Но эти два invalidate() не означают, что onDraw() обязательно будет вызван ровно два раза. При обычном сценарии видимого TextView без анимаций будет одна отрисовка после завершения обработчика, с текстом Third text.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

