Подход с параллельными потоками кажется наиболее популярным, но он поднимает 2 основные проблемы:
- В соответствии с документацией весь код, связанный с пользовательским интерфейсом, должен выполняться на основном (иначе называемом) графическом интерфейсе") нить.Хотя вызов .start () для AnimationDrawable не может считаться чистой операцией пользовательского интерфейса, я все же чувствую, что он должен следовать этому правилу.
- Вы никогда не можете точно знать, когда начнется ваша анимация.Я видел код со "магическими" значениями длины задержки, которые должны были это исправить.Вы должны знать, что Бог убивает маленького котенка каждый раз, когда программист использует такой подход.
Итак, я предлагаю использовать очень метко названный метод runOnUiThread ().Вызов его в onResume () гарантирует, что ваш код анимации будет выполняться в главном потоке, что он будет работать после присоединения окна, вы будете знать, где именно будет обрабатываться сообщение, и котятам не нужно терять ихжизни:
@Override
protected void onResume()
{
super.onResume();
runOnUiThread(new Runnable()
{
@Override
public void run()
{
animation.start();
}
});
}