【发布时间】:2016-07-31 19:07:00
【问题描述】:
我有一个ViewPager,其中包含五个Fragment。每个 Fragment 包含大量数据。例如,第一个片段是包含文本和图像的 600 个条目的列表。其他四个Fragment 包含图表,这些图表正在从 600 个值的列表中创建评估。我实施的优化是:
- 适配器内没有数据库选择
- 适配器内没有图像加载(我使用毕加索)
- 适配器内部没有数据解析
我还在AsyncTask 中加载适配器的条目。对于RecyclerView,我设置了以下选项:
this.listRowParent.setItemViewCacheSize(5);
this.listRowParent.setDrawingCacheEnabled(true);
this.listRowParent.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
this.listRowParent.setHasFixedSize(true);
经过我的所有优化,滚动非常流畅。我遇到的问题是当片段变得可见时会发生什么。当我设置适配器的那一刻,用户界面开始冻结(在 100 到 300 帧之间跳过)。我试图解决它增加OffscreenPageLimit:
this.viewPager.setOffscreenPageLimit(5);
但这有时会有所帮助。我猜适配器设置时的内部初始化在 ui 线程上执行了太多工作,但我不知道如何提高性能。我在适配器和onBindViewHolder 方法中执行的唯一操作是列表初始化中的比较。
如何进一步提高性能?例如,是否可以将代码放在onBincViewHolder 中的AsyncTask 中,或者由于RecyclerView 的机制而无法实现?
【问题讨论】:
标签: android performance android-viewpager android-recyclerview