Optimizing Apps For Technical Constraints in Emerging Markets
Eric Tyler – Erict19@gmail.com
------------------
SLIDE 19: Data constraints
Utilize caching and compression: https://code.facebook.com/posts/1365439333482197/how-we-built-facebook-lite-for-every-android-phone-and-network
Caching: https://www.youtube.com/watch?v=7lxVqqWwTb0&index=1&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu
https://www.youtube.com/playlist?list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu
Minimize APK size - http://stackoverflow.com/questions/3815269/how-to-reduce-app-apk-size
Optimize data fetching and pushing: https://code.facebook.com/posts/1365439333482197/how-we-built-facebook-lite-for-every-android-phone-and-network
Build asynchronous requests: http://gsmaterminals.github.io/Developer-Guidelines-Public/#4_1_asynchrony
Network Constraints
Optimize client-server & network interaction - http://developer.android.com/training/efficient-downloads/efficient-network-access.html & http://developer.android.com/training/basics/network-ops/managing.html & https://code.facebook.com/posts/952628711437136/classes-performance-and-network-segmentation-on-android/
Consider an offline mode: http://gsmaterminals.github.io/Developer-Guidelines-Public/#3_2_3_offline_mode
Include low-bandwidth rendering: http://gsmaterminals.github.io/Developer-Guidelines-Public/#3_2_4_bandwidth_awareness
Account for wifi offloading: http://www.aptilo.com/mobile-data-offloading/wifi-offload-3g-4g
Hardware constraints
Adapt application behavior for different device classes - https://github.com/facebook/device-year-class
Minimize RAM, battery and storage → Ram -https://source.android.com/devices/tech/debug/procstats.html Power - https://source.android.com/devices/tech/power/index.html Battery - https://source.android.com/devices/tech/power/batterystats.html
Memory -- http://developer.android.com/training/articles/memory.html
Account for multiple screens: https://github.com/facebook/device-year-class
Ensure background is dormant: http://gsmaterminals.github.io/Developer-Guidelines-Public/#4_6_background_foreground_modes
---------
Efficient Network Connection Usage
Account for seamless network switching
Offloading to wifi
Asynschony
Offline mode
Bandwith Awareness
Efficient network connections
Optimized Traffic Usage
Utilize Compression
Dormant background mode
methods of optimal data transmission (efficient protocols, caching, compression, data aggregation, pipelining, etc.)
Resilient to changing network conditions
Support Compression
Usability/ Asynchrony (Asynchronous requests)
Techniques such as pipelining and asynchrony should be used to ensure that the client operates smoothly
Efficient network connection usage
Use strategies that minimiseand optimise data traffic and avoid unnecessary data transfers, especially when roaming.
Background/ foreground modes
Deactivate background processes when not required. Deactivate background processes when not required.
Background/ foreground modes, Scheduling
Design polling applications to aggregate their network activities.
Connection loss and error handling
Applications should be resilient to changing network conditions and errors.
Compression
Applications using HTTP should support compression.
Data push
Applications should use push services in preference to polling.
Slow connectivity
-Provide low-bandwidth UI for seamless downgrade
-Use progress rendering
-Prioritize serving the most popular user request
Intermittent connectivity
-Work seamlessly between 2g/3g/LTE
-Pre-cache and download when wifi available
-Core usability in offline when connection lost
Hardware
— Account for capability for small screens
— Built for limited RAM/local storage
— Optimize for minimal batter usage
Software
—Optimize for small app footprint
—Provide an mobile-web version
Costs
—Minimize cost from download through usage
— Only update when necessary and small size
— Communicate the value-add of updates