Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Philly ETE 2017: Loving Lean Android Layouts
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Huyen Tue Dao
April 18, 2017
Technology
330
0
Share
Philly ETE 2017: Loving Lean Android Layouts
Huyen's talk at Philly ETE on performance and efficiency in Android layouts.
Huyen Tue Dao
April 18, 2017
More Decks by Huyen Tue Dao
See All by Huyen Tue Dao
Less Imperative with More Kotlin
queencodemonkey
0
330
Øredev 2017: Cool ConstraintLayout
queencodemonkey
3
380
Øredev 2017: Measure. Layout. Draw. Repeat.
queencodemonkey
0
580
Be Like Water: Keeping Up with Android
queencodemonkey
2
370
DevFest DC 2017: Cool ConstraintLayout
queencodemonkey
1
14k
Chicago Roboto 2017: Cool ConstraintLayout
queencodemonkey
9
1.1k
Droidcon Boston 2017: Cool ConstraintLayout
queencodemonkey
6
560
My Life in Android
queencodemonkey
1
530
DevFest MN 2017: Cool ConstraintLayout
queencodemonkey
1
590
Other Decks in Technology
See All in Technology
20260513_生成AIを専属DSに_AI分析結果の検品テクニック_ハンズオン_交通事故データ
doradora09
PRO
0
230
おいらのAWSアップデートの追い方〜Slack×AgentCore〜
yakumo
1
110
「背中を見て育て」からの卒業 〜専門技術としてのテスト設計を軸に、品質保証のバトンを繋ぐ〜 #genda_tech_talk
nihonbuson
PRO
4
1.5k
生成AI時代に信頼性をどう保ち続けるか - Policy as Code の実践
akitok_
1
490
いつの間にかデータエンジニア以外の業務も増えていたけど、意外と経験が役に立ってる
zozotech
PRO
0
670
10サービス以上のメール到達率改善を地道に継続的に進めている話 / Continue to improve email delivery rates across multiple services
yamaguchitk333
6
2.1k
Loadbalancing exporter internals
ymotongpoo
1
100
20260515 ⾃分のアカウントとプライバシーを守る認証と認可の話〜利⽤者向け〜
oidfj
0
710
インプロセスQAのための要因から捉えるプロジェクトリスクマネジメントnano #1 開発リソース効率状態への対処 #jasstnano
barus_qa
0
180
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
100k
Oracle Cloud Infrastructure presents managed, serverless MCP Servers for Oracle AI Database
thatjeffsmith
1
370
O'Reilly Infrastructure & Ops Superstream: Platform Engineering for Developers, Architects & the Rest of Us
syntasso
0
280
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
360
Typedesign – Prime Four
hannesfritz
42
3k
My Coaching Mixtape
mlcsv
0
130
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
690
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
GraphQLとの向き合い方2022年版
quramy
50
15k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
180
Transcript
HUYEN TUE DAO @QUEENCODEMONKEY LOVING LEAN ANDROID LAYOUTS
LOVING LEAN ANDROID LAYOUTS <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/help_im_being_repressed" android:textStyle="bold" style="@style/TextAppearance.AppCompat.Body1" /> <ImageView android:layout_width="0dp" android:layout_height=“@dimen/image_height" android:layout_weight="2" android:src="@drawable/berries_plate" android:scaleType="centerCrop" android:contentDescription="@null" /> <ImageView android:layout_width="0dp" android:layout_height="@dimen/image_height" android:layout_weight="1" android:src="@drawable/creme_brulee" android:scaleType="centerCrop" android:contentDescription="@null" /> </LinearLayout>
LOVING LEAN ANDROID LAYOUTS WHY LEAN LAYOUTS FINDING PROBLEMS FIXING
PROBLEMS GOOD PRACTICES
HOW ANDROID DRAWS LAYOUTS MEASURE LAYOUT DRAW DEPTH-FIRST TRAVERSAL INFLATION
PARENT MEASURES EACH CHILD CHILD CALCULATES MEASURED WIDTH/HEIGHT MEASURE OWN
CHILDREN (IF ANY) HOW ANDROID DRAWS LAYOUTS MEASURE LAYOUT DRAW
HOW ANDROID DRAWS LAYOUTS MEASURE LAYOUT DRAW PARENT SIZES AND
POSITIONS CHILD
HOW ANDROID DRAWS LAYOUTS MEASURE LAYOUT DRAW PARENT DRAWS PARENT
TELLS CHILDREN TO DRAW
LOVING LEAN ANDROID LAYOUTS WHY LEAN LAYOUTS FINDING PROBLEMS FIXING
PROBLEMS GOOD PRACTICES
WHY LEAN LAYOUTS #PERFMATTERS
PERFORMANCE = RESOURCES USED ∝COMPLEXITY
PERFORMANCE = RESOURCES USED ∝COMPLEXITY = # VIEWS/DEPTH OF HIERARCHY
PERFORMANCE = RESOURCES USED ∝COMPLEXITY = # VIEWS/DEPTH OF HIERARCHY
= # EXECUTIONS OF onMeasure()/onLayout()
PERFORMANCE = RESOURCES USED ∝COMPLEXITY = # VIEWS/DEPTH OF HIERARCHY
= # EXECUTIONS OF onMeasure()/onLayout() BAD PERFORMANCE = UI JANK
MAINTAINABILITY WHY LEAN LAYOUTS
RESOURCES USED∝COMPLEXITY ∝EFFORT TO MAINTAIN AND REFACTOR = READABILITY (PARSING
+ NESTING) + STABILITY
CHANGE IN SIZE/POSITION STARTS MEASURE/LAYOUT STARTING AT ROOT. SOME LAYOUTS
NEED MULTIPLE MEASURE/LAYOUT PASSES, E.G. RELATIVELAYOUT LISTS MAKE MANY COPIES OF SAME LAYOUT DEEP HIERARCHIES INCREASE COMPLEXITY AND DEPENDENCY WHERE IS THE PROBLEM?
LOVING LEAN ANDROID LAYOUTS WHY LEAN LAYOUTS FINDING PROBLEMS FIXING
PROBLEMS GOOD PRACTICES
HIERARCHY VIEWER FINDING PROBLEMS VISUALIZATION ANDROID DEVICE MONITOR BEST ON
PHYSICAL DEVICE | 4.1+
None
None
LAYOUT INSPECTOR FINDING PROBLEMS ANDROID MONITOR EXAMINE/DEBUG LAYOUT EVENTUALLY SUPERSEDE
HIERARCHY VIEWER
None
BLUEPRINT VIEW FINDING PROBLEMS
SYSTRACE FINDING PROBLEMS SYSTEM + APPLICATION PROCESS EXECUTION DATA DATA
TRACE → INTERACTIVE REPORTS SMOOTH UI → 60FPS → 16.6MS/FRAME
None
None
DUMPSYS FINDING PROBLEMS SYSTEM SERVICES STATUS FRAMES OF ANIMATION adb
shell dumpsys gfxinfo <PACKAGE_NAME> DETAILED FRAME TIMING INFO adb shell dumpsys gfxinfo <PACKAGE_NAME> framestats
OnFrameMetricsAvailableListener FINDING PROBLEMS MARSHMALLOW PUB/SUB API EQUIVALENT TO DUMPSYS FRAMESTATS
EXCEPT NOT LIMITED TO 120 FRAMES
LOVING LEAN ANDROID LAYOUTS WHY LEAN LAYOUTS FINDING PROBLEMS FIXING
PROBLEMS GOOD PRACTICES
MAKE LINT HAPPY FIXING PROBLEMS
None
LINT USELESS PARENT
LINT NESTED WEIGHTS
LINT TOO MUCH NESTING
SIMPLIFY AND REDUCE FIXING PROBLEMS
None
<LinearLayout > <ImageView /> <TextView /> </LinearLayout>
3 VIEWS, 2 LEVELS
<TextView… android:drawablePadding=“…" android:drawableEnd=“…"/> 1 VIEW, 1 LEVEL
None
None
SPANNABLES
<LinearLayout…> <TextView… style="@style/StyleA" /> <TextView… style="@style/StyleB" />
<TextView… style="@style/StyleA" /> </LinearLayout> 4 VIEWS, 2 LEVELS
<TextView…/> + Spannables 1 VIEW, 1 LEVEL
None
None
<FrameLayout… android:padding=“…” android:background=“…“> <LinearLayout /> </FrameLayout> 2 VIEWS,
2 LEVELS
<LinearLayout… android:padding=“…” android:background=“…“/> 1 VIEW, 1 LEVEL
None
None
<LinearLayout > <LinearLayout> <TextView /> <TextView />
</LinearLayout> <TextView /> </LinearLayout> 5 VIEWS, 3 LEVELS
<ConstraintLayout…> <TextView… /> <TextView… /> <TextView… />
</ConstraintLayout> 4 VIEWS, 2 LEVEL
CONSTRAINTLAYOUT MORE EXPRESSIVE MORE PERFORMANT FLATTEN HIERARCHIES REDUCE VIEWS
None
GO CUSTOM FIXING PROBLEMS CUSTOM VIEW/VIEWGROUP TOTAL CONTROL OVER LAYOUT/DRAW
BALANCE PERFORMANCE GAINS AND DEVELOPMENT EFFORT
GO CUSTOM FIXING PROBLEMS CUSTOM VIEW/VIEWGROUP TOTAL CONTROL OVER LAYOUT/DRAW
BALANCE PERFORMANCE GAINS AND DEVELOPMENT EFFORT
LOVING LEAN ANDROID LAYOUTS WHY LEAN LAYOUTS FINDING PROBLEMS FIXING
PROBLEMS GOOD PRACTICES
ANTICIPATE AND DEVELOP GOOD HABITS GOOD PRACTICES
SIMPLEST SOLUTIONS WHERE POSSIBLE GOOD PRACTICES
FEWER AND FLATTER NO RELATIVELAYOUT AT ROOT GOOD PRACTICES
DON’T LET PROBLEMS ACCUMULATE GOOD PRACTICES
BALANCE PERFORMANCE GAINS WITH DEVELOPMENT EFFORT GOOD PRACTICES
THANK YOU! SPEAKERDECK.COM/QUEENCODEMONKEY YOUTUBE.COM/ANDROIDDIALOGS RANDOMLYTYPING.COM HUYEN TUE DAO @QUEENCODEMONKEY
REFERENCES 63 ANDROID PERFORMANCE PATTERNS, WHY 60FPS? https://youtu.be/CaMTIgxCSqU DEVELOPING FOR
ANDROID: THE NAUGHTY BITS https://youtu.be/Q2qQoJlwqlk?t=36m4s HIERARCHY VIEWER https://developer.android.com/studio/profile/hierarchy-viewer.html LAYOUT INSPECTOR http://tools.android.com/tech-docs/layout-inspector
REFERENCES 64 TESTING DISPLAY PERFORMANCE http://developer.android.com/training/testing/performance.html ANALYZING UI PERFORMANCE WITH
SYSTRACE http://developer.android.com/tools/debugging/systrace.html OPTIMIZING LAYOUT HIERARCHIES http://developer.android.com/training/improving-layouts/optimizing-layout.html ANDROID PERFORMANCE PATTERNS, DOUBLE LAYOUT TAXATION https://www.youtube.com/watch?v=dB3_vgS-Uqo ANDROID PERFORMANCE PATTERN, INVALIDATIONS, LAYOUTS, AND PERFORMANCE https://youtu.be/we6poP0kw6E
REFERENCES 65 BUILD A RESPONSIVE UI WITH CONSTRAINTLAYOUT developer.android.com/training/constraint-layout/index.html ANDROID
DEVELOPERS BACKSTAGE: EPISODE 50: CONSTRAINT LAYOUT androidbackstage.blogspot.com/2016/06/episode-50-constraint-layout.html CUSTOM VIEWGROUPS https://sriramramani.wordpress.com/2015/05/06/custom-viewgroups/ MEASURE, LAYOUT, DRAW, REPEAT: CUSTOM VIEWS AND VIEWGROUPS https://youtu.be/dLl0ovmta6A