Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tuning Android Applications (Part Deux)


Published on

From 2011's AnDevCon II conference

Published in: Technology
  • Be the first to comment

Tuning Android Applications (Part Deux)

  1. 1. Tuning Android Applications (part deux) Copyright © 2011 CommonsWare, LLC
  2. 2. What Ill Be Yammering About● You Missed It – Traceview – MAT● Now – Battery and Bandwidth – Top Ten Tuning Tips Copyright © 2011 CommonsWare, LLC
  3. 3. Bandwidth & BatteryMeasurement Copyright © 2011 CommonsWare, LLC
  4. 4. Bandwidth Issues● Too Much In General – Users on metered plans pay through the nose – Users on “unlimited” plans hit the, um, limits● Too Much At Poor Times – While the user is trying to use bandwidth for other purposes (e.g., streaming video) – When the user is on mobile data instead of WiFi Copyright © 2011 CommonsWare, LLC
  5. 5. Measuring Bandwidth● Option #1: Find an App – Bandwidth Monitor – Traffic Monitor – Network Traffic Detail – Etc. Copyright © 2011 CommonsWare, LLC
  6. 6. Measuring Bandwidth● Option #2: TrafficStats – Static methods to report bandwidth consumption to date ● Entire device, all networks ● Entire device, by network (mobile data vs. WiFi) ● Per UID (all, TCP vs. UDP) – Transmit (Tx) vs. Receive (Rx) – Bytes vs. Segments vs. Packets Copyright © 2011 CommonsWare, LLC
  7. 7. Measuring Bandwidth● Option #1: TrafficStats – Take snapshots at points in time ● Delta between values = consumed bandwidth – Two Integration Styles ● In test suites, to determine if your mitigation strategies are working ● In production, for traffic shaping Copyright © 2011 CommonsWare, LLC
  8. 8. Measuring Bandwidth● Option #2: ICS Settings – Chart of bandwidth consumed – Ability to see per-application and set limits – Downside: hardware only? Copyright © 2011 CommonsWare, LLC
  9. 9. Measuring Bandwidth● Option #3: Wireshark – Requires rooted device or integration at WiFi access point – Gives you full logs of all activity ● Determine not only how much bandwidth, but what it is being used for Copyright © 2011 CommonsWare, LLC
  10. 10. Issues with Battery● You Get Blamed – Your app shows up on the battery consumption Settings screen, users get irritated● You Want to be Friendly – Dynamically adjust your behavior to deal with low battery conditions Copyright © 2011 CommonsWare, LLC
  11. 11. Measuring Power Usage● Qualcomm MDP and Trepn – Pros ● Highly detailed information, down to the component and process ● Graphs (on-device) and logs (for offline analysis) – Cons ● Trepn only works on Qualcomm MDP ● MDP is frakkin expensive (~$1,400) Copyright © 2011 CommonsWare, LLC
  12. 12. Measuring Power Usage● PowerTutor – Pros ● Free! – Cons ● Accuracy so-so for Nexus One, worse for other modern devices ● No logging Copyright © 2011 CommonsWare, LLC
  13. 13. Measuring Power Usage● Settings Battery “Blame Screen” – If you dont show up here, how bad can it be?● adb shell dumpsys batteryinfo – Tons of data – Difficult to grok Copyright © 2011 CommonsWare, LLC
  14. 14. Top Ten Tuning Tips (totally) Copyright © 2011 CommonsWare, LLC
  15. 15. Measure, Measure, Measure● Dont Start Hacking Away – Example: randomly removing accessor methods● Identify Problem Area First – What is too slow, or leaking, or whatever?● Cure What Ails Ya – Premature optimization helps nobody Copyright © 2011 CommonsWare, LLC
  16. 16. Recycling: Its Good for the “Urf!”● Adapter View Recycling – Rows in lists – Pages in ViewPager● Bitmaps – If it has a recycle() method, use it! Copyright © 2011 CommonsWare, LLC
  17. 17. Activities Stay Active● Activities Not Destroyed to Free Heap Space – BACK button, finish(), configuration change – Process termination (may not call onDestroy())● Mitigation Strategies – Activity recycling – Time-based belt-tightening Copyright © 2011 CommonsWare, LLC
  18. 18. Threads: More Than a Panacea, But...● The Good – Move stuff off the main application thread● The Bad – Most devices in use still single core – Threads consume more CPU time● The Ugly – Thrashing among too many threads Copyright © 2011 CommonsWare, LLC
  19. 19. Robbing Peter to Pay Paul● Threads● Caching – Trading off RAM to save disk I/O, or CPU time, or bandwidth – Trading off disk space to save bandwidth, or CPU time – Ensure you dont trade too much (whack-a-mole) Copyright © 2011 CommonsWare, LLC
  20. 20. Hardware Is Real. Really Real.● Emulator Is Slower At... – CPU● Emulator Is Faster At... – Disk I/O – Network (usually, compared to wireless data)● Net: Test on Hardware Too Copyright © 2011 CommonsWare, LLC
  21. 21. Globals, Processes, and Cavemen● Global Scope: Risk of Memory Leaks – Tempting as central holding spot for data – Reason why considered bad form in standard Java development● Extra Processes: Just Say No! – Usually add no value – Consume extra RAM, CPU time Copyright © 2011 CommonsWare, LLC
  22. 22. YAGNI● You Aint Gonna Need It – Downloading and caching data that might not get used – Fancy plug-in architecture for an app with no plug-ins● Constrained Devices Need Constrained Plans Copyright © 2011 CommonsWare, LLC
  23. 23. Dont Be Chatty● JNI/NDK – Each context switch from Java to C/C++ (and back) adds overhead● IPC – Every call between processes adds overhead – Includes sendBroadcast()!● Aim For Coarse-Grained Protocols Copyright © 2011 CommonsWare, LLC
  24. 24. Lather. Rinse. Repeat.● Keep Testing and Tuning – Major application releases – Major OS releases ● Example: rumored AsyncTask thread pool shrinkage – Major device style releases ● Example: multi-core Copyright © 2011 CommonsWare, LLC