Что делает postInvalidate ()? - PullRequest
       14

Что делает postInvalidate ()?

60 голосов
/ 02 апреля 2011

Какая польза от функции postInvalidate() в Android?Я видел эту функцию во многих местах.Когда я погуглил, у меня появилось много такого:

postInvalidate-- опубликовать недействительный запрос в UI-потоке

Не знаюне знаю, что там означает фраза «запрос на недействительность».Может кто-нибудь подробно объяснить, что здесь происходит?

Ответы [ 3 ]

124 голосов
/ 02 апреля 2011

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

Просто сравните аннулируйте и postInvalidate .

20 голосов
/ 02 апреля 2011

С помощью этого метода (postInvalidate()) вы можете аннулировать View из потоков не-пользовательского интерфейса.Чтобы аннулировать View из потока пользовательского интерфейса, используйте метод invalidate().

Аннулирование означает, что метод View.onDraw(Canvas) будет вызван в какой-то момент в будущем (не сразу) для перерисовки всего View (если View виден).

Android автоматически перерисовывает View s, но иногда необходимо сказать: "Эй, это View было изменено, перерисовать его как можно быстрее. "

Больше на:

http://developer.android.com/guide/topics/ui/how-android-draws.html

http://developer.android.com/reference/android/view/View.html#invalidate%28%29

2 голосов
/ 21 июля 2016

Проще говоря, метод invalidate() можно вызывать из потока пользовательского интерфейса, а postInvalidate() можно вызывать из потока, не являющегося пользовательским интерфейсом, чтобы сообщить Android об обновлении нашего пользовательского представления после внесения в него некоторых изменений.

...