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

Andromance - Android Performance

Mert Simsek
November 03, 2013

Andromance - Android Performance

Andromance - Android Performance Optimization presentation @ DevFest Ankara 2013

Mert Simsek

November 03, 2013
Tweet

More Decks by Mert Simsek

Other Decks in Technology

Transcript

  1. Orhun Mert Şimşek • Android & Java Developer • Educational

    Responsible at GDG Ankara • Student at Hacettepe University – CS (still…) • Freelancer • Android Evangelist
  2. Performance is EVERYTHING • Use Less Objects, More Primitives •

    How to Search a 2D Array? • Use «Static» as Possible • «Lint» Usage • Reusable Layouts • Do Your Hard-Work on Background Threads • View Holder for ListView Objects • XML Drawables • Handling Overdraws • Summary and Little Other Tips
  3. Use Less Objects, More Primitives Creating an object is extremely:

    EXPENSIVE! … but «primitive» is not! Using a 2 different integer array is more efficient than using object arrays like fooBar(int,int) badArray = new FooBar[] { new FooBar(5,8) , new FooBar(84,2) }; firstCoolArray = new int[] { 5, 84 }; secondCoolArray = new int[] { 8 , 2 };
  4. How to Search a 2D Array? Search first for row,

    then column TO DO for (int i = 0; i < foo.length ; i++) { for (int j = 0; j < foo.length ; j++) { process(foo[i,j]); } } NOT TO DO for (int i = 0; i < foo.length ; i++) { for (int j = 0; j < foo.length ; j++) { process(foo[j,i]); } }
  5. Use «Static» as Possible It is 15% - 20% faster!

    And also use «static final» for your constants Static variables are initialized only once , at the start of the execution.
  6. «Lint» Usage The lint tool checks your Android project source

    files for potential bugs and optimization improvements for correctness, security, performance, usability, accessibility, and internationalization. * http://developer.android.com/tools/debugging/improving-w-lint.html
  7. «Lint» Usage In Eclipse it is easy to use, just

    one click! In command line: «lint [flags] <project directory>» «lint myproject» «lint --check MissingPrefix myproject»
  8. Reusable Layouts <include layout="@layout/titlebar"/> It is commonly used for title

    bars, yes-no button panels etc. Very easy to implement: Create a layout and use it in another layout with «<include ../>» tag Reusing a layout is like using static for layouts.
  9. Do Your Hard-Work on Background Threads It is forbidden to

    make network processes in main thread, since Android 3.0 Phones and tablets have great ability for parallel process, anymore. So why not use it? How about Instagram? When you finished writing some hashtags and pressed to send button, It had been posted just a while ago!
  10. View Holder for ListView Objects static class ViewHolder { TextView

    text; TextView timestamp; ImageView icon; } ViewHolder holder = new ViewHolder(); holder.icon = (ImageView) convertView.findViewById(R.id.listitem_image); holder.text = (TextView) convertView.findViewById(R.id.listitem_text); … A ViewHolder object stores each of the component views inside the ListView object, so you can immediately access them without the need to look them up repeatedly.
  11. XML Drawables PNG’s, JPG’s and others are big sized and

    a hard work for mobile device. But creating an image with XML is very cheap and it is more efficient than you expected. Using a 400 kb background image or using an Xml drawable which has size of just 300 bytes?
  12. XML Drawables <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <stroke android:width="3dp"

    android:color="#000000" /> <gradient android:endColor="#F5CD7A" android:startColor="#657892" android:angle="90" /> </shape>
  13. Handling Overdraws The most important part of performance. – If

    you ask me! Since Android 4.2, we can see overdraws in our devices. Overdraw is simply, drawing a pixel more than one. It’s notation is also simple: • No color: No overdraw • Blue: 1x overdraw (pixel is drawed 2 times) • Green: 2x overdraw • Light Red: 3x overdraw • Dark Red: 4x or more overdraw (ALERT!)
  14. Handling Overdraws How to avoid? You have to go deeper

    and deeper, it is engineering miracle! But there are something to do from upper layer: • thumbnail.setBackgroundColor(0x0); • android:windowBackground="@null" • If a view will not used anymore, don’t make its visibility «INVISIBLE», make it «GONE» • And use a simple design!
  15. Summary and Little Other Tips  Do use two parallel

    «int» arrays instead of array of objects (int,int)  Do use «primitive» instead of objects  Do use as possible as «static» methods  Do use «static final» for constants  Do use foreach instead of for  Do use as possible as Xml Drawables instead of images (jpg,png)  Don’t create unnecessary objects  Don’t allocate memory if you can work without it  Don’t use getters and setters inside the class  Don’t do your hard works on main thread and the most important one:  Don’t publish your app unless it doesn’t have performance problems!
  16. Torment Is Over, That’s All! Thanks for listening! O. Mert

    Şimşek /orhunmertsimsek mertsimsek.net