Share
Embed
Droidcon SF 2016: Loving Lean Layouts
Huyen talks about the benefits of and battleplan for creating efficient, "lean" layouts at Droidcon San Francisco 2016.
Huyen Tue Dao
March 18, 2016
Transcript
19 slides
-
WHY LEAN LAYOUTS? • Complexity ∝ Resources (memory, CPU) •
Complexity? • # of views • Depth of view hierarchy • (Really) # of measure() and layout() executions • Bad performance → UI/animations jank 3 #PERFMATTERS -
WHY LEAN LAYOUTS? • Complexity ∝ effort to maintain/refactor •
Readability • Complex views hard to parse • Too many; too indented • Stability: a change to one part affects other part 4 MAINTAINABILITY -
WHERE’S THE PROBLEM? (HINT: SEVERAL PLACES) r Change in size/position
starts measure/layout starting at root. r r r r Some layouts need multiple measure/layout passes, e.g. RelativeLayout Lists make many copies of same layout Deep hierarchies increase complexity and dependency -
FIND PROBLEMS • SDK tool for visualizing view hierarchy •
Used to be standalone; now in Device Monitor • Evaluates performance of measure(), layout(), and draw() phases • Best: use on physical device running 4.1 up HIERARCHY VIEWER : -
FIND PROBLEMS • systrace: system + application process execution data
→ interactive reports • Frame rendering → how much time measure/layout takes up; warns of frames that exceed 16.6ms needed for 60fps • dumpsys: collects and dumps “interesting information” about system services status • adb shell dumpsys gfxinfo <PACKAGE_NAME> → perf info related to frames of animation • adb shell dumpsys gfxinfo <PACKAGE_NAME> framestats → detailed frame timing info; on Marshmallow SYSTRACE + DUMPSYS : -
FIX PROBLEMS • Lint complains about things that are generally
not good ideas. • Good candidates for things that you should fix first. • Don’t nest weights • Remove useless views • Don’t nest too much MAKE LINT HAPPY : -
FIX PROBLEMS • Many different ways to do one thing:
opt for simplest • Often attributes or other techniques can replace multiple views, e.g.: • TextView compound drawables • Spannable • Placeholder/divider • Plain ol’ View or Space. • LinearLayout → android:divider • Sometimes you just need to pick the right view/layout. SIMPLIFY AND REDUCE : -
FIX PROBLEMS SIMPLIFY AND REDUCE : <LinearLayout…> <ImageView…/>
<TextView…/> </LinearLayout> <TextView… android:drawablePadding=“…" android:drawableEnd=“…"/> → 3 VIEWS, 2 LEVELS 1 VIEW, 1 LEVEL -
FIX PROBLEMS SIMPLIFY AND REDUCE : <LinearLayout…> <TextView… style="@style/StyleA"
/> <TextView… style="@style/StyleB" /> <TextView… style="@style/StyleA" /> </LinearLayout> <TextView…/> + Spannables → 4 VIEWS, 2 LEVELS 1 VIEW, 1 LEVEL -
FIX PROBLEMS • Sometimes best option = custom ViewGroup. •
Total control over measure/layout logic. • Mitigate double-layout phases. • Also: totally custom Views (draw all the things). • Start out with simple, straightforward layouts. • Balance performance gains with development effort. GO CUSTOM : -
GOOD PRACTICES • Anticipate and develop good habits • Use
simplest solutions where possible • “Don’t do too much stuff.” • Fewer/flatter Views and ViewGroups. • Don’t use RelativeLayout at the root! • Don’t let problems accumulate. • Balance performance gains with development effort. -
THANKS FOR COMING! https://github.com/queencodemonkey/Android-Loving-Lean-Layouts Huyen Tue Dao @queencodemonkey +HuyenTueDao [email protected]
randomlytyping.com youtube.com/androiddialogs speakerdeck.com/queencodemonkey -
REFERENCES • Android Performance Patterns, Why 60fps? https://youtu.be/ CaMTIgxCSqU •
Developing for Android: the Naughty Bits https://youtu.be/Q2qQoJlwqlk? t=36m4s • Hierarchy Viewer: http://developer.android.com/tools/help/hierarchy- viewer.html • Hierarchy Viewer Walkthrough: http://developer.android.com/tools/ performance/hierarchy-viewer/index.html • Testing Display Performance: http://developer.android.com/training/ testing/performance.html • Analyzing UI Performance with Systrace: http://developer.android.com/ tools/debugging/systrace.html 18 -
REFERENCES • Custom ViewGroups: https:// sriramramani.wordpress.com/2015/05/06/custom- viewgroups/ • 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 19