В чем разница между методами invalidate() и postInvalidate() Android?
В чем разница между Android в invalidate()
и postInvalidate()
методами? Когда каждого из них вызывают? Должны ли методы вызываться только в классах, которые расширяют View
?
1 ответов
если вы хотите повторно нарисовать свой вид из UI Thread
можно назвать invalidate()
метод.
если вы хотите повторно нарисовать свой вид из Non UI Thread
можно назвать postInvalidate()
метод.
каждый класс, производный от класса View, имеет метод invalidate и postInvalidate. Если invalidate вызывается, он сообщает системе, что текущее представление изменилось, и его следует перерисовать как можно скорее. Поскольку этот метод может быть вызван только из вашего UIThread, другой метод необходимо, когда вы не находитесь в UIThread и все еще хотите уведомить систему о том, что ваше представление было изменено. Метод postInvalidate уведомляет систему из не-UIThread, и представление перерисовывается в следующем eventloop на UIThread как можно скорее. Это также кратко объясняется в документации SDK:
обновление:
есть некоторые проблемы, которые возникают при использовании postInvalidate из других потоков (например, не после обновления пользовательского интерфейса сразу), это будет более эффективно:
runOnUiThread(new Runnable() {
public void run() {
myImageView.setImageBitmap(image);
imageView.invalidate();
}
});