Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Medellín Android 2016-06-01: Loving Lean Layouts

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →

Medellín Android 2016-06-01: Loving Lean Layouts

La charla dé al primer meetup de Medellín Android.

Huyen Tue Dao

June 02, 2016

Transcript

21 slides
  1. 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
  2. WHY LEAN LAYOUTS? • Complexity ∝ effort to maintain/refactor •

    Readability • Complex views are hard to parse • Too nested → too indented • Stability: a change to one part affects other part 4 MAINTAINABILITY
  3. HOW TO LAYOUT A VIEW HIERARCHY measure STEP 1 layout

    STEP 2 measure measure layout layout r
  4. 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
  5. 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 • Do not use runtime numbers given in Hierarchy Viewer; completely inaccurate HIERARCHY VIEWER :
  6. 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 • FrameMetricsListener API: Android N; framestats without 120 frame limit SYSTRACE + DUMPSYS :
  7. 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 :
  8. 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 → View or Space. • Sometimes you just need to pick the right view/layout. • Less views, less levels, less nesting • ConstraintLayout SIMPLIFY AND REDUCE :
  9. FIX PROBLEMS SIMPLIFY AND REDUCE : <LinearLayout…>
 
 <ImageView…/>
 


    <TextView…/>
 
 </LinearLayout> <TextView…
 android:drawablePadding=“…"
 android:drawableEnd=“…"/> → 3 VIEWS, 2 LEVELS 1 VIEW, 1 LEVEL
  10. 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
  11. FIX PROBLEMS SIMPLIFY AND REDUCE : <LinearLayout… >
 
 <LinearLayout…>


    
 <TextView… />
 
 <TextView… />
 
 </LinearLayout>
 
 <TextView… />
 
 </LinearLayout> 
 
 <RelativeLayout…>
 
 <TextView… />
 
 <TextView… />
 
 <TextView… />
 
 </RelativeLayout> → 5 VIEWS, 3 LEVELS 4 VIEW, 2 LEVEL
  12. 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 :
  13. 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.
  14. 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 20
  15. 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 21

More Decks by Huyen Tue Dao

Other Decks in Technology