打开带有自定义动画的片段,然后快速按下导致应用冻结

时间:2017-01-04 10:35:15

标签: android android-fragments

我面临一个奇怪的问题。 当我使用以下代码使用setCustomAnimation()启动片段时:

/**
     * launch a fragment
     *
     * @param containerID      - frameLayout ID
     * @param fragment         -  fragment we want to launch
     * @param isAddToBackStack - add to back stack???
     */
    public void launchFragment(int containerID, Fragment fragment, boolean isAddToBackStack) {
        FragmentManager mFragmentManager = getSupportFragmentManager();
        FragmentTransaction mFragmentTransaction = mFragmentManager.beginTransaction();

        mFragmentTransaction.setCustomAnimations(R.anim.anim_transition_enter_fade_in
                , R.anim.anim_transition_exit_fade_out
                , R.anim.anim_transaction_fade_in_pop
                , R.anim.anim_transaction_fadeout_pop)
                .replace(containerID, fragment);

        if (isAddToBackStack) {
            mFragmentTransaction.addToBackStack(null);
        }
        mFragmentTransaction.commitAllowingStateLoss();
    }

当我在动画完成之前快速按下后退按钮时,应用会冻结。 我已经录制了应用程序屏幕。请查看以下视频:

https://drive.google.com/file/d/0BxFmkFbsB3NhNkRLbm8yQ195TUU/view?usp=drivesdk

任何帮助将不胜感激。 感谢

1 个答案:

答案 0 :(得分:0)

我认为您的应用在动画结束前会遇到状态丢失。

替换你的:

mFragmentTransaction.commitAllowingStateLoss();

使用:

mFragmentTransaction.commit();

如果通过更改上面的代码导致IllegalStateException: Can not perform this action after onSaveInstanceState错误,

然后您可能需要查看此Blog有关正在发生的事情。

希望这有帮助。