Ответ 1
В ViewTreeObserver
есть два метода с почти одним и тем же именем.
removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim)
(на, а затем глобальный) - это метод, который был добавлен в API 16. Он заменяет
removeGlobalOnLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim)
(глобальный, а затем на), который существует с API 1, но который теперь устарел.
Оба метода могут появляться во время компиляции (если вы создаете против Jellybean или выше), но более новый из них будет работать не на устройствах до Джеллибо.
Этот код препятствует ошибке:
try {
thing.removeOnGlobalLayoutListener(victim);
} catch (NoSuchMethodError x) {
thing.removeGlobalOnLayoutListener(victim);
}
Так делает этот код:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
thing.removeGlobalOnLayoutListener(victim);
} else {
thing.removeOnGlobalLayoutListener(victim);
}