web-dev-qa-db-ja.com

RelativeLayoutはLinearLayoutよりも高価ですか?

Viewコンテナが必要になるたびに、RelativeLayoutを常に使用しています。これは、非常にシンプルなものを表示したいだけでも、柔軟性があるためです。

パフォーマンス/グッドプラクティスの観点から、そうしても大丈夫ですか、可能であればLinearLayoutを使用する必要がありますか?

ありがとう!

112
nbarraille

Google I/O 2013(Android向けカスタムビューの作成)での講演で、Romain Guyは、すべての人がRelativeLayoutsを使用し始めた誤解を明らかにしました。 RelativeLayoutは常に2つのメジャーパスを実行する必要があります。全体として、ビュー階層が単純である限り無視できます。しかし、階層が複雑な場合、余分なメジャーパスを実行すると、かなりコストがかかる可能性があります。また、RelativeLayoutsをネストすると、指数測定アルゴリズムが得られます。

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=1m41s

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=38m04s

多数のビューをレイアウトしている場合を除き(ListViewなど)、LinearLayoutまたはRelativeLayoutを選択するパフォーマンスは無視できます。ジョブに使用するのに最も便利な方を選択し、必要な場合にのみパフォーマンスを心配します。

そして、ここに Creating Efficient Layouts に関するRelative DocsがRelativeLayoutとLinearLayoutのパフォーマンスについて述べているものがあります:

基本的な機能に固執することは、残念ながらユーザーインターフェイスを作成する最も効率的な方法ではありません。一般的な例は、LinearLayoutの不正使用です。これにより、ビュー階層内のビューが急増します。アプリケーションに追加するすべてのビュー、またはさらに悪いことに、すべてのレイアウトマネージャーにはコストがかかります。初期化、レイアウト、描画が遅くなります。レイアウトパラメーターは、重みパラメーターを使用する複数のLinearLayoutをネストする場合に特にコストが高くなる可能性があり、子を2回測定する必要があります。

52
Lie Ryan

RelativelayoutはLinearlayoutよりも効果的です。

ここ から:

基本的なレイアウト構造を使用すると、最も効率的なレイアウトが得られるというのはよくある誤解です。ただし、アプリケーションに追加する各ウィジェットとレイアウトには、初期化、レイアウト、描画が必要です。たとえば、LinearLayoutのネストされたインスタンスを使用すると、ビュー階層が過度に深くなる可能性があります。さらに、layout_weightパラメーターを使用するLinearLayoutのいくつかのインスタンスをネストすると、各子を2回測定する必要があるため、特にコストがかかる可能性があります。これは、ListViewやGridViewで使用する場合など、レイアウトが繰り返し膨張する場合に特に重要です。

2
Nicholas Liu

2018更新: AndroidのNリリースでは、 ConstraintLayout クラスはRelativeLayoutと同様の機能を提供しますが、大幅に低コストです。これは非常に強力なレイアウトマネージャーであり、複雑なGUIを構築する必要があるときはいつでも使用する必要があります。

0
akelec