Intereting Posts
Бесконечная проблема с прокруткой с помощью EndlesScroll Android Невозможно понизить базу данных с версии 2 до 1 даже после новой установки и повторного запуска Запуск и остановка записи с помощью кнопки в уведомлении Как распечатать счёт фактуры с использованием bluetooth-термопринтера Android & Maven: ускорить компиляцию и развертывание проекта Как вы справляетесь с интернационализацией: «Ваш вход« xyz »превосходный!» Как использовать wrap_content с максимальной шириной? Изменение размера растрового изображения после загрузки с помощью универсального загрузчика изображений Eclipse и Android и classpath: bin и target OnSaveInstanceState не работает Proguard слишком медленно замедляет процесс сборки android Spinner with checkbox items, возможно ли это? Какими размерами должно быть изображение в ящике навигации? Java.lang.NoClassDefFoundError $$ inlined $ forEach $ lambda $ 1 в Котлине Анимированный переход между двумя изображениями

В чем разница между методами invalidate () и postInvalidate () Android?

В чем разница между методами invalidate() и postInvalidate() Android? Когда вызываются вызовы? Должны ли методы быть вызваны только в классах, которые расширяют View ?

Solutions Collecting From Web of "В чем разница между методами invalidate () и postInvalidate () Android?"

Если вы хотите просмотреть свой вид из UI Thread вы можете вызвать метод invalidate() .

Если вы хотите перерисовать свое мнение из Non UI Thread вы можете вызвать postInvalidate() .

Каждый класс, полученный из класса View, имеет invalidate и метод postInvalidate. При вызове invalidate он сообщает системе, что текущее представление изменилось, и оно должно быть перерисовано как можно скорее. Поскольку этот метод может быть вызван только из вашего UIThread, нужен другой метод, если вы не находитесь в UIThread и все еще хотите уведомить систему о том, что ваш View был изменен. Метод postInvalidate уведомляет систему из не-UIThread, и View как можно скорее перерисовывается в следующем eventloop на UIThread. Это также коротко объясняется в документации SDK:

КЛИКНИТЕ СЮДА

ОБНОВИТЬ:

Есть некоторые проблемы, возникающие при использовании postInvalidate из других потоков (например, без обновления пользовательского интерфейса сразу), это будет более эффективно:

 runOnUiThread(new Runnable() { public void run() { myImageView.setImageBitmap(image); imageView.invalidate(); } });