android - ViewPager + SurfaceView = 导航回 Activity 时的长时间延迟

标签 android android-viewpager android-view

基本上就是标题所说的,

我的应用程序主要由 ViewPager 组成它使用 FragmentStatePagerAdapter

当我添加一系列 SurfaceViews 时出现问题到 FragmentStatePagerAdapter。 出于测试目的,我没有以任何方式对 SurfaceView 进行子类化。 当我浏览几页,点击“主页”,然后返回 Activity 时,整个设备会在渲染任何内容之前卡住一两秒钟。我可以在应用程序从后台堆栈中拉出后恢复所需的时间内多次启动和完成()该应用程序。我知道应用程序正在运行,因为在第一个屏幕绘制最终出现时,几个 AsyncTasks 已经接近完成。我知道这些 AsyncTasks 不会导致问题,因为我已将它们删除但没有任何效果。

当我将 SurfaceViews 更改为 Views 时问题完全消失了。

当我使用我的实际 SurfaceViews(对于我的项目来说是不可协商的)时也会出现此问题。此问题也会出现在多个设备上。

此时我认为故障完全出在 ViewPager 上,但我不知道该怎么办,因为我需要那个界面组件。

如有任何帮助,我们将不胜感激!

编辑:

澄清一下,SurfaceViews/Views 代表添加到 FragmentStatePagerAdapter 的 Fragment 的 View 。

最佳答案

为 future 的 google 员工找到了解决方案!

这是我的做法:

在我的 fragment 中,我在 onCreate() 中实例化了 mySurfaceView

然后我在 onCreateView() 期间将虚拟布局 (LinearLayout) 附加到实际 View

然后在 onResume() 中,我使用 removeAllViews() 清除了虚拟布局,然后调用了 addView(mySurfaceView)

这似乎允许 ViewPager 快速构建其布局,然后在用户实际需要查看任何内容之前弹出 SurfaceView!

关于android - ViewPager + SurfaceView = 导航回 Activity 时的长时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11356085/

相关文章:

android - 在 FragmentStatePagerAdapter 的 instantiateItem() 中实现 setTag() 和 findViewWithTag()

Android Retrofit api调用,参数中有空格

android - 使用 AlarmManager 与 Handler Android 的不同情况

android - 连接 Charles 代理时,Google 双击广告请求失败

android - 访问方向变化的 fragment View

android - ViewPager 与 fragment 内的 ListView - 修改时 ListView 不会更新

Android:View类中getTag()和setTag()的用途

android - 圆形ImageView

android - 在运行时确定 Android View 的大小

java - Activity中的Android电话号码调用函数