2016-08-30 3 views
5

У меня есть два фрагмента & Б.
Я перешли на B из A, используя следующий код:экран замерзает при popBackStack() называется

FragmentManager fragmentManager; 
    FragmentTransaction transaction; 
    fragmentManager = getActivity().getFragmentManager(); 
    transaction = fragmentManager.beginTransaction(); 
    transaction.setCustomAnimations(R.animator.enter_anim, R.animator.exit_anim,R.animator.popenter, R.animator.popexit); 
    transaction.replace(R.id.fragmentLayout, new B()) 
      .addToBackStack("tag").commit(); 

В содержит SQLite операции (SugarORM).
При переключении с A на B экран замерзает, даже если я использую AsyncTask & IntentService для операций db.
Кроме того, когда я нажимаю кнопку [getFragmentManager().popBackStack();], экран зависает в течение нескольких секунд, прежде чем он переключится обратно на A с B.
popBackStack анимация слишком не видна.
Я попытался показать неопределенный индикатор выполнения & анимационный список в представлении изображения, но они тоже замораживаются & похоже, что это статические изображения.

+1

проверьте, имеет ли ваш FRAGMENT A какие-либо блокировки блокировки ui в onCreateView/onViewCreated. –

+0

опубликуйте свой AsyncTask. и вы можете видеть анимацию за счет увеличения задержки. – Nepster

+0

записывает журналы всех ваших методов в оба фрагмента, и вы можете узнать, проверив журналы, в течение которых два процесса (между которыми 2 журнала) так долго занимаются, и вы можете исправить причину (особенно в onResume или в onPause). Если возможно вставьте код. –

ответ

1

Проверить эту статью на профилирование главной темы: https://developer.android.com/studio/profile/traceview.html

Это покажет вам, что прогиб основного потока, который, вероятно, является причиной для замораживания.

Кроме того, следуйте советам @ NishantPardamwar для проверки методов жизненного цикла фрагмента, которые выполняются в основном потоке и, вероятно, являются виновниками.