Android: чтение из View не из UI-треда
Как везде пишут, не следует трогать UI-объекты не из UI-треда. С изменениями понятно, это сложный процесс и если влезть в него параллельно, можно всё сломать. Но как насчёт чтения свойств?
Например, нужно отследить, что пользователь домотал до конца большого списка, а ставить обработчик на scroll, чтобы он вызывался по десять раз в секунду в UI-треде излишне. Можно сделать так:
val th = thread(start=true) {
var inProcess = true
while (inProcess) {
if (scrollView.scrollY > limit) {
// congratulations!
inProcess = false
} else {
Thread.sleep(2000)
}
}
}
В фоне смотрим раз в пару секунд на положение скрола. Никаких ошибок не замечено. С другой стороны, вряд ли проверка попадала на момент изменения скрола.
В исходниках смотрю, это просто отдача свойства:
protected int mScrollY;
@InspectableProperty
public final int getScrollY() {
return mScrollY;
}
Могут ли быть в этом и подобных случаях какие-либо подводные камни?