如何缓存片段视图

Posted

技术标签:

【中文标题】如何缓存片段视图【英文标题】:How to cache a fragment view 【发布时间】:2012-07-02 18:04:37 【问题描述】:

我想缓存一个片段视图。我的活动有可滑动的选项卡,每个选项卡调用不同的片段。但是当我在选项卡之间滑动时,由于片段视图的破坏,过渡似乎很慢,在滑动操作期间会重建。有谁知道如何缓存每个片段的视图以防止此问题? 我使用库支持 v4 和 api 14

我尝试为片段实现一个构造函数,由片段的活动容器调用:我调用构造函数,片段被创建为活动类的变量,然后,每当片段必须显示自己时,活动类返回我之前创建的片段对象,但这并没有改善我的应用程序,因为片段的视图无论如何都会被破坏

【问题讨论】:

您是否尝试过在片段本身中缓存视图并在 onCreateView 上返回缓存的片段?还是视图总是被破坏? 您是否使用ViewPager 作为您的“可滑动标签”? 【参考方案1】:

这是因为默认情况下,寻呼机在内部最多加载 3 个页面(片段): 显示的,上一个和下一个,所以如果你有 5 个片段,这将在你从第一个到最后一个移动时发生:(其中 x 是加载的片段)

xx000 -> xxx00 -> 0xxx0 -> 00xxx -> 000xx

尝试使用

myPager.setOffscreenPageLimit(ITEMS_COUNT-1);

这将告诉寻呼机将它们全部保存在内存中,而不是在每次滑动时销毁/创建(密切关注内存管理)

【讨论】:

这不会调用标签片段的onCreateView 吗? (片段布局视图加载的地方) @StarDust 是的,这将在开始时同时为所有片段调用 onCreateView。这很棘手,您可能会耗尽内存或者只是因为片段而黑屏或阻塞加载过程。如果您必须加载 4 或 5 个轻量级片段,此解决方案很好,但我不会为 10 个重载片段执行此操作。您可以将 offscreenPageLimit 设置为低于碎片数的任何数字,例如,如果您有 10 个页面并将限制设置为 4 并且您在第 6 个屏幕中,它将在两个方向上额外加载 2 个,例如 000xx x xx00(我认为最好的解决方案)

以上是关于如何缓存片段视图的主要内容,如果未能解决你的问题,请参考以下文章

FragmentStatePageAdapter 缓存,重新创​​建活动后如何引用旧片段? (对于前 - 横向模式)

如何使用视图绑定从片段更改父活动中的视图[重复]

如何从使用视图寻呼机创建的选项卡片段转移到另一个片段

如何使列表视图出现在片段中?

从另一个片段返回时如何在视图页面中显示片段?

如何将图像视图从改造加载的片段传递给子片段?