Intereting Posts
Удалить значок и заголовок приложения из панели действий Honeycomb Как изменить цвет края прокрутки и пролить свет Ошибка получения родительского элемента – Android Studio Long.getLong () failing, возвращающий значение null в действительную строку Процент символа в strings.xml Побитовое «&» на длинном? Получение android.content.res.Resources $ NotFoundException: исключение, даже если ресурс присутствует в android Android: сокращение пространства между столбцами в GridView Как захватить событие «виртуальная клавиатура show / hide» в Android? Проблема упорядочивания стека событий при запуске приложения из установщика приложений Android и с главного экрана В чем смысл xmlns: инструментов в макете Android XML? Процесс службы уничтожается после удаления приложения из лотка приложения. Как добавить библиотеку (поддержка android-v7-appcompat) в IntelliJ IDEA Runtime.exec (): перезагрузка в Android? Как работает свойство .class?

В чем разница между методами 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(); } });