Я пытаюсь использовать новый API для перехода активности только на леденец (хотя я использую компактную версию), поэтому я реализую анимацию от действия A к действию B в действии A:
getWindow().setReenterTransition(null);
getWindow().setExitTransition(null);
getWindow().setAllowEnterTransitionOverlap(false);
getWindow().setAllowReturnTransitionOverlap(false);
поскольку меня не интересует вход или выход из этого действия, единственные анимации, которые я хочу видеть, находятся в общем представлении с действием B.
Для запуска Activity B:
ActivityCompat.startActivity(this, intent, ActivityOptionsCompat.makeSceneTransitionAnimation(this, fabButton, getString(R.string.transition_fab)).toBundle());
И настройка Activity B:
getWindow().setEnterTransition(new EmptyTransition());
getWindow().setReturnTransition(null);
getWindow().setAllowEnterTransitionOverlap(false);
getWindow().setAllowReturnTransitionOverlap(false);
getWindow().getEnterTransition().addListener(listener).
Опять же, меня не интересует переход ввода или переход возврата, потому что содержимое скрыто до тех пор, пока не будет вызван метод прослушивания перехода onTransitionEnd, поэтому мой переход основан на общем элементе, который перемещается/растет от действия A к действию B и когда этот переход закончен, я вношу контент.
Все работает нормально, но на не очень мощных устройствах (поэтому все не Nexus) время от времени Activity A молча вылетает с ошибкой:
java.lang.RuntimeException: Performing stop of activity that is not resumed: {com.transferwise.android.debug/com.transferwise.android.activity.LoggedInMainActivity}
И происходит переход общего элемента, но тогда слушатель не вызывается (не событие TransitionStart), поэтому контент не поступает. Приложение не вылетает, пользователь все еще может нажать «назад» и «попробовать еще раз», но это не очень хороший UX.
Проверить это сложно, потому что это происходит раз в 10-20 раз и только на некоторых конкретных устройствах (чаще на Sony Xperia Z3 compact).
Также:
Danieles-MacBook-Pro-2:~ danielebottillo$ adb shell dumpsys activity p | grep com.package.main.debug
*APP* UID 10349 ProcessRecord{3b27508d 18371:com.package.main.debug/u0a349}
dir=/data/app/com.package.main.debug-1/base.apk publicDir=/data/app/com.package.main.debug-1/base.apk data=/data/data/com.package.main.debug
packageList={com.package.main.debug}
- ActivityRecord{2f07bdf8 u0 com.package.main.debug/com.package.main.activity.ActivityA t1196}
- ActivityRecord{1e871eb3 u0 com.package.main.debug/com.package.main.activity.ActivityB t1196}
- 28ea3e28/com.android.providers.settings/.SettingsProvider->18371:com.package.main.debug/u0a349 s1/1 u0/0 +27m9s645ms
- ReceiverList{40f2178 18371 com.package.main.debug/10349/u0 remote:39e102db}
- ReceiverList{2e7456a6 18371 com.package.main.debug/10349/u0 remote:dde3801}
- ReceiverList{39e2f1b7 18371 com.package.main.debug/10349/u0 remote:362300b6}
- ReceiverList{3afa7bd5 18371 com.package.main.debug/10349/u0 remote:33e4088c}
Proc # 0: fore F/A/T trm:10 18371:com.package.main.debug/u0a349 (top-activity)
PID #18371: ProcessRecord{3b27508d 18371:com.package.main.debug/u0a349}