Что делает postInvalidate()?
Какая функция postInvalidate()
используется в Android? Я видел эту функцию во многих местах. Когда я в Googled, я вышел с этим много:
postInvalidate-- отправить запрос недействительности в пользовательский интерфейс
Я не знаю, что означает фраза "invalidate request". Может кто-нибудь объяснить подробно, что здесь происходит?
Ответы
Ответ 1
Каждый класс, полученный из класса View, имеет метод invalidate и postInvalidate. При вызове invalidate он сообщает системе, что текущее представление изменилось, и оно должно быть перерисовано как можно скорее. Поскольку этот метод можно вызывать только из вашего UIThread, нужен другой метод, если вы не находитесь в UIThread и все еще хотите уведомить систему о том, что ваш View был изменен. Метод postInvalidate уведомляет систему из не-UIThread, и представление как можно скорее перерисовывается в следующем eventloop на UIThread. Это также вкратце объяснено в документации SDK.
Просто сравните invalidate и postInvalidate.
Ответ 2
С помощью этого метода (postInvalidate()
) вы можете аннулировать View
из потоков, отличных от UI. Чтобы аннулировать View
из UI-потока, используйте метод invalidate()
.
Недействительность означает, что метод View.onDraw(Canvas)
мы будем вызывать в какой-то момент в будущем (а не сразу), чтобы перерисовать целое View
(если отображается View
).
Android выполняет автоматическую перерисовку View
, но иногда необходимо сказать: "Привет, этот View
был изменен, перерисовывайте его как можно быстрее".
Дополнительно:
http://developer.android.com/guide/topics/ui/how-android-draws.html
http://developer.android.com/reference/android/view/View.html#invalidate%28%29
Ответ 3
В простых словах метод invalidate()
может быть вызван из потока пользовательского интерфейса и postInvalidate()
может быть вызван из потока, отличного от UI, чтобы сообщить андроиду обновить наш пользовательский вид после внесения в него некоторых изменений.