Я работаю над старым кодом Android, где код выглядит примерно так:
public void TestMethod() {
// handler posting on main thread
handler.post(() -> {
//Invokes method();
});
animation.addListener(new AnimatatorListenerAdapter(){
@Override
public void onAnimationEnd() {
// Do some stuff;
}
});
animation.start();
}
Насколько я понимаю, обратные вызовы жизненного цикла анимации всегда выполняются в потоке пользовательского интерфейса. Так как метод () размещается первым в очереди сообщений, поэтому он должен выполняться перед onAnimationEnd (), но иногда (3/10 раз) onAnimationEnd выполняется перед методом (). Поэтому сейчас я запутался в анимации Android (конечно, я что-то упускаю).
Вопросы:
Каким должен быть идеальный поток в этом коде?
Между method()
и onAnimationEnd()
, какой из них будет выполнен первым и почему?
Как анимация Android выполняется в потоке пользовательского интерфейса без блокировки других сообщений и запускается в очереди сообщений в потоке пользовательского интерфейса?