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
Huyen Tue Dao
April 18, 2017
Technology
0
310
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
Tweet
Share
More Decks by Huyen Tue Dao
See All by Huyen Tue Dao
Less Imperative with More Kotlin
queencodemonkey
0
300
Øredev 2017: Cool ConstraintLayout
queencodemonkey
3
350
Øredev 2017: Measure. Layout. Draw. Repeat.
queencodemonkey
0
520
Be Like Water: Keeping Up with Android
queencodemonkey
2
330
DevFest DC 2017: Cool ConstraintLayout
queencodemonkey
1
13k
Chicago Roboto 2017: Cool ConstraintLayout
queencodemonkey
9
1.1k
Droidcon Boston 2017: Cool ConstraintLayout
queencodemonkey
6
530
My Life in Android
queencodemonkey
1
500
DevFest MN 2017: Cool ConstraintLayout
queencodemonkey
1
570
Other Decks in Technology
See All in Technology
モノタロウ x クリエーションラインで実現する チームトポロジーにおける プラットフォームチーム・ ストリームアラインドチームの 効果的なコラボレーション
creationline
0
340
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
わが10年の叡智をぶつけたカオスなクラウドインフラが、なくなるということ。
sogaoh
PRO
1
190
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
820
AWS re:Inventre:cap ~AmazonNova 2 Omniのワークショップを体験してきた~
nrinetcom
PRO
0
130
AIエージェントを5分で一気におさらい!AIエージェント「構築」元年に備えよう
yakumo
1
140
RALGO : AIを組織に組み込む方法 -アルゴリズム中心組織設計- #RSGT2026 / RALGO: How to Integrate AI into an Organization – Algorithm-Centric Organizational Design
kyonmm
PRO
3
540
形式手法特論:コンパイラの「正しさ」は証明できるか? #burikaigi / BuriKaigi 2026
ytaka23
15
3.7k
Redshift認可、アップデートでどう変わった?
handy
1
120
「リリースファースト」の実感を届けるには 〜停滞するチームに変化を起こすアプローチ〜 #RSGT2026
kintotechdev
0
500
AI時代のアジャイルチームを目指して ー スクラムというコンフォートゾーンからの脱却 ー / Toward Agile Teams in the Age of AI
takaking22
9
3.2k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
HDC tutorial
michielstock
1
290
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
0
390
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
1
340
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
4 Signs Your Business is Dying
shpigford
187
22k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
410
SEO for Brand Visibility & Recognition
aleyda
0
4.1k
Heart Work Chapter 1 - Part 1
lfama
PRO
3
35k
Fireside Chat
paigeccino
41
3.8k
We Have a Design System, Now What?
morganepeng
54
8k
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