Чтобы запустить анимацию Litho автоматически и повторять ее бесконечно, я изменил RTAnimationComponentSpec , запустив TimerTask
:
@OnCreateInitialState
static void createInitialState(
ComponentContext c) {
startRepeatingAnimation(c);
}
static void startRepeatingAnimation(final ComponentContext c) {
Log.e(TAG, "Repeat animation handler: about to scheduleAtFixedRate");
TimerTask animateRepeat = new java.util.TimerTask() {
public void run() {
try {
Log.e(TAG, "Repeat animation handler: about to updateStateAsync");
RTAnimationComponent.updateStateAsync(c);
} catch (Exception e) {
Log.e(TAG, "Repeat animation handler: exception while animating: [" + e + "]");
}
}
};
new java.util.Timer().scheduleAtFixedRate(animateRepeat, 0, FADE_IN_OUT_DURATION + FADE_IN_DELAY + FADE_IN_STAGGER_DELAY);
}
private static final String TAG = "RTComponentSpec";
Я не уверенэто допустимое использование createInitialState()
хотя.Согласно документации, это «Установить начальное значение для состояния».Под состоянием Litho означает переменные, помеченные @ State .Неофициально, однако, анимация является частью состояния, и TimerTask
действительно необходимо запустить.Семантически инициализация TimerTask
выглядит так, как будто она относится к созданию начального состояния.
Опытным путем логи показали, что я хотел.Первоначальное сообщение журнала «Обработчик повтора анимации: собирается планировать.AtFixedRate» появляется один раз, после чего появляются периодические экземпляры «Обработчика повторения анимации: собирается обновить».
Я полагаю, что решение может также работать с другими механизмами Android для планирования.работа на периодической основе