Я рисую изображения динамически, и хотел установить размеры ImageViews с помощью LinearLayout, а затем использовать эти размеры. Поэтому мне нужно создать изображения после завершения макета.
Я использовал View.post (Runnable) в конце onCreate, затем создал изображения в Runnable. Я немного поэкспериментировал и обнаружил, что onStart, onResume и onPostResume имели место до макета (ширина ImageView была 0). Размещенный Runnable был выполнен после всех из них и после макета, потому что ширина была установлена.
public void run() {
// acquire the ImageView
if (image.getWidth() == 0)
image.post( this );
else {
// create the images, initialize the ImageViews etc.
}
}
Размещенный Runnable, по-видимому, публикуется в потоке пользовательского интерфейса после процедур запуска. ImageViews будет запрашивать макеты, а запросы публикуются после Runnable. На всякий случай, я проверяю, что ширина была установлена и помещаю репозиторий Runnable, если это не так. После завершения инициализации Runnable больше не публикуется.