如何缓存片段视图
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(我认为最好的解决方案)以上是关于如何缓存片段视图的主要内容,如果未能解决你的问题,请参考以下文章