the Information Society http://www.itu.int/en/ITU-D/Statistics/Pages/publications/anapub.aspx 1 billion new users are expected to come online by 2017, mostly from emerging market
http://hdr.undp.org/en/countries Socio-economic statistics: www.gapminder.org OECD countries: www.oecd.org 78% of the world’s population lives in emerging markets (5.7 billion people)
immediate visible reaction ◦ Hide/show views, scrolling views, state changes • Every touchable item should have touch feedback ◦ Use touch ripple from android 5.0+ Material: Responsive Design goo.gl/zMDilf
lossless format • Supported Natively on Android since 4.0 and with Lossless Format since 4.2; Supported in Chrome and Opera • 24-34% better compression than JPEG; 28% better than PNG with little to no loss in visible quality
◦ Remember assets scaled down look OKbut not the reverse • Launcher icons include up to xxxhdpi ◦ Store in mipmap- directories (eg. mipmap-hdpi) • Remove unused code and resources ◦ minifyEnabled=true ◦ shrinkResources=true • Multiple APK an option but has tradeoffs
• Only run UI updates and logic on the UI thread • Memory allocations can cause GC ◦ Images often to blame - use a library like Glide or Picasso • Use on-device tools: GPU profiling and overdraw Performance patterns video series goo.gl/3dBbse
andWakefulBroadcastReceiver • Use the new JobScheduler API in Android 5.0+ • Batch network transfers and connections • User facing battery blaming and new developer tooling Keeping the device awake goo.gl/EQVB0i
the system wake you ◦ GCM,JobScheduler,AlarmManager or other system events • ActivityManager.isLowRamDevice() ◦ ~512MB with 800x480 or less screen • Process stats and new memory monitor
user experience Optimize for fast, responsive UI that is not tied to long running operations like networkrequests Google I/O 2014 App github.com/google/iosched
◦ Use a local database for long lived data ◦ Use a bounded disk cache for transitory data • Screens should still be navigable even if network is down • Never block the UI due to a long running operation ◦ Use inline loading spinners if needed ◦ Use AsyncTask but only for UI related background operations
new features as you are worried about compatibility with the existing system. • Time is spent fixing old code, which have developed mysterious bugs that are hard to reproduce and to fix. • You may have forgotten what a lot of the code does, and so you may be afraid that touching it will break the system.
maintain, easier for new developers to learn, easier to debug, faster to find what you're looking for, and most importantly: helps that the programmers writing the code actually understand business objectives.