App列表页优化

1,609 阅读1分钟

常规方案

  • convertView复用,使用ViewHolder。
  • 耗时任务异步处理。

布局优化

  • 减少布局层级,避免过度绘制。
  • 异步inflate或者X2C
  • Litho

图片相关

  • 避免过大尺寸:GC频繁,内存抖动。
  • 滑动时取消加载。

线程相关

  • 使用线程池收敛线程,降低线程优先级。
  • 避免UI线程时间片被抢占。

设置高度固定

  • 如果item高度是固定的话,可以使用RecyclerView.setHasFixedSize(true);来避免requestLayout浪费资源。

onBinderViewHolder设置监听会导致对象重复创建

  • onCreateViewHolder设置监听。

共用RecycledViewPool

  • 在嵌套RecyclerView中,如果子RecyclerView具有相同的adapter,那么可以设置RecyclerView.setRecycledViewPool(pool)来共用一个RecycledViewPool。
  • 如果LayoutManager是LinearLayoutManager或其子类,需要手动开启这个特性:layout.setRecycleChildrenOnDetach(true)
class OuterAdapter extends RecyclerView.Adapter<OuterAdapter.ViewHolder> {
    RecyclerView.RecycledViewPool mSharedPool = new RecyclerView.RecycledViewPool();

...

    @Override
    public OuterAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        RecyclerView innerLLM = new RecyclerView(inflater.getContext());

        LinearLayoutManager innerLLM = new LinearLayoutManager(parent.getContext(), LinearLayoutManager.HORIZONTAL);
        innerLLM.setRecycleChildrenOnDetach(true);
        innerRv.setLayoutManager(innerLLM);
        innerRv.setRecycledViewPool(mSharedPool);
        return new OuterAdapter.ViewHolder(innerRv);
    }

TextView优化

其他

  • 字符串拼接。

参考: