27
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ConstraintLayoutをネストすると激重になる

Last updated at Posted at 2018-04-17

ConstraintLayoutを使うとやたら重くなったので調査した。
多重のViewGroup内に10セル程度のListViewを配置した画面が、完全に表示されるまでの時間を計測。

こんな感じ

<ConstraintLayout>
  <ConstraintLayout>
    <ConstraintLayout>
      <ConstraintLayout>
        <ConstraintLayout>
          <!-- 長いので以下省略 -->
          <ListView />
        </ConstraintLayout>
      </ConstraintLayout>
    </ConstraintLayout>
  </ConstraintLayout>
</ConstraintLayout>

調査結果

レイアウト 時間(秒)
何もなし 0.7
FrameLayout 15個 1.0
LinearLayout 15個 1.5
RelativeLayout 15個 12
ConstraintLayout 15個 動作不能(60秒以上)
ConstraintLayout 12個 動作不能(60秒以上)
ConstraintLayout 10個 23
ConstraintLayout 8個 4

※ Huawei p10 Lite(Android7 2017/06発売)にて確認

まとめ

ViewGroupをネストすると重くなるとよく言われるが、レイアウトクラスによって重さはかなり違うもよう。
FrameLayoutはたいしたことないが、RelativeLayoutのネストはかなり重く、ConstraintLayoutはさらに重い。

ConstraintLayoutはフラットなView階層を実現できるのでパフォーマンス向上を見込めると公式に説明があるが、フラットにしないと使い物にならないかもしれない。

LinearLayout は上の条件では軽かったが、layout_weightを使うと重くなるとの情報がある。
使うattributeやViewの構成など諸々の条件によっても重さは変わってくるものと思われる。

27
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?