【问题标题】:Bad performance with a big UI layout大型 UI 布局导致性能不佳
【发布时间】:2018-11-20 09:45:22
【问题描述】:

一开始我有一个活动,上面有一些字段。随着时间的推移布局变得太大,所以现在我需要对其进行重构。

目前在三星 Galaxy S8 上,活动需要大约 2 秒才能显示,在旧设备上这个数字是 4-5 秒,这太可怕了。

有没有人告诉我我应该从哪里开始重构?我曾想过将底部部分放在回收视图中,但行完全不同,并且完整的内容必须是可滚动的(另外还有一个HorizontalScrollView 用于图像)。我正在使用 Glide 加载图像。

布局文件:layout xml.

截图:screenshot from actual screen.

更新1:

也许某种动态数据加载可以帮助我?例如,在 UI 膨胀后显示“空”片段,然后从上到下动态设置字段。

【问题讨论】:

  • 也许你应该使用片段?像模块一样,例如显示图片的片段等,就像你要在不同的部分爆炸你的布局
  • 使用片段。一页布局滚动太多。这就是为什么它会出现 2 -5 秒。
  • 谢谢你们俩。我应该如何将附加的长片段分成更小的部分?该片段位于 ViewPager 中(带有地图片段)。我应该使用什么 UI 控件来替换我的解决方案并完成您的建议? UI 控件,设计模式,每一个建议都应该有帮助。如果我将一件大事分成许多小事,渲染将如何更快?系统必须处理相同数量的视图,不是吗?谢谢!

标签: android android-linearlayout android-constraintlayout


【解决方案1】:

我选择了AsyncLayoutInflater,到目前为止,这似乎是解决我的问题的好选择。

示例代码:

AsyncLayoutInflater asyncLayoutInflater = new AsyncLayoutInflater(getContext());
asyncLayoutInflater.inflate(R.layout.fragment_lake_more_data, mLakeDataContainer, new AsyncLayoutInflater.OnInflateFinishedListener() {

    @Override
    public void onInflateFinished(@NonNull View view, int resid, ViewGroup parent) {
        // set UI elements with data
        // ...

        parent.addView(view);
    }

}
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多