【问题标题】:Screen freezes when popBackStack() is called调用 popBackStack() 时屏幕冻结
【发布时间】:2016-08-30 09:59:16
【问题描述】:

我有两个片段 A 和 B。
我已使用以下代码从 A 切换到 B:

    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();

B 包含 SQLite 操作(SugarORM)。
从 A 切换到 B 时,即使我使用 AsyncTaskIntentService 进行数据库操作,屏幕也会冻结。
另外,当我按下返回按钮 [getFragmentManager().popBackStack();] 时,屏幕会冻结几秒钟,然后从 B 切换回 A。
popBackStack 动画太不可见了。
我尝试在 imageview 中显示不确定的进度条和动画列表,但它们也冻结了,看起来好像是静态图像。

【问题讨论】:

  • 检查您的 FRAGMENT A 是否在 onCreateView/onViewCreated 中有任何 ui 阻塞调用。
  • 发布您的 AsyncTask。并且你可以通过增加延迟来看到动画。
  • 把你所有方法中的日志放在两个片段中,你可以通过查看日志找出两个进程(其中2个日志之间)花费了这么长时间,你可以纠正原因。(特别是在onResume 或 onPause)如果可能,粘贴代码。

标签: android fragment freeze fragment-backstack


【解决方案1】:

查看这篇关于分析你的主线程的文章:https://developer.android.com/studio/profile/traceview.html

这会告诉你是什么占用了主线程,这可能是冻结的原因。

另外,请按照@NishantPardamwar 的建议检查片段的生命周期方法,这些方法在主线程上运行并且可能是罪魁祸首。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    相关资源
    最近更新 更多