Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und...
Transcript of Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und...
![Page 1: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/1.jpg)
Performance - Optimierung
mit und ohne Android Developer Tools
Dominik Helleberg
Köln - 25.09.2014
![Page 2: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/2.jpg)
2
Performance
Analysieren
Verstehen
Fixen
![Page 3: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/3.jpg)
3
Performance-Probleme... Netzwerk / Cache
![Page 4: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/4.jpg)
4
Performance-Probleme... Netzwerk / Cache
![Page 5: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/5.jpg)
5
Performance-Probleme... Netzwerk / Cache
![Page 6: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/6.jpg)
6
Performance-Probleme... Netzwerk / Cache
![Page 7: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/7.jpg)
7
Performance-Probleme... User Interface
![Page 8: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/8.jpg)
8
Performance-Probleme... User Interface
![Page 9: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/9.jpg)
https://flic.kr/p/6MVMJi grrr | sookie
9
Performance Probleme Grrrrrr
![Page 10: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/10.jpg)
https://flic.kr/p/6oLD5r Tacho | Thaddäus Zoltkowski
10
Performance messen Laufzeiten
![Page 11: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/11.jpg)
11
Performance messen Laufzeiten
Log !long start = System.nanoTime(); !!/** Do things.... */ !!Log.d(TAG, “Doing took” +(System.nanoTime()-start)); !
![Page 12: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/12.jpg)
12
Performance messen Laufzeiten
Timing Logger !
TimingLogger timings = new TimingLogger(TAG, "mURL"); !/** Do cache */ !timings.addSplit(“cache"); !/** Do load */ !timings.addSplit(“load"); !/** and scale! */ !timings.addSplit(“scale"); !timings.dumpToLog(); !
$> adb shell setprop log.tag.TTTask VERBOSE !
TTTask D mURL: begin ! D mURL: 4 ms, cache ! D mURL: 1819 ms, load ! D mURL: 8 ms, scale ! D mURL: end, 1831 ms !
![Page 13: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/13.jpg)
13
Performance messen Laufzeiten
Hugo !apply plugin: 'hugo‘ !!classpath 'com.jakewharton.hugo:hugo-plugin:1.1.+‘ !!!
import hugo.weaving.DebugLog; !!@DebugLog !protected Bitmap doInBackground(Void... arg0) { !!} !
" " " D ⇢ doInBackground(arg0=null) !!Activity$ThumbnailTask D ⇠ doInBackground [1015ms] = !
" " "android.graphics.Bitmap@b187ec38 !
![Page 14: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/14.jpg)
14
Performance messen Laufzeiten
Traceview!
![Page 15: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/15.jpg)
15
Performance messen Laufzeiten
Traceview!
![Page 16: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/16.jpg)
16
Performance messen Laufzeiten
Systrace ab API Level 16 (4.1) !
![Page 17: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/17.jpg)
17
Performance messen Laufzeiten
Systrace ab API Level 18 (4.3) !
systrace -‐t 20 -‐b 10000 gfx input view sched freq -‐a de.inovex.samples
Trace.beginSection("bind-view"); !!/*do things ... */ !!!Trace.endSection(); !!!
![Page 18: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/18.jpg)
18
Performance messen Frames
![Page 19: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/19.jpg)
http://www.curious-creature.org/docs/android-performance-case-study-1.html 19
Performance messen Frames
(Blau) Draw is the time spent building display lists in Java. It indicates how much time is spent running methods such as View.onDraw(Canvas).
![Page 20: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/20.jpg)
http://www.curious-creature.org/docs/android-performance-case-study-1.html 20
Performance messen Frames
(ROT) Process is the time spent by Android’s 2D renderer to execute the display lists. The more Views in your hierarchy, the more drawing commands must be executed.
![Page 21: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/21.jpg)
http://www.curious-creature.org/docs/android-performance-case-study-1.html 21
Performance messen Frames
(Orange) Execute is the time it took to send a frame to the compositor. This part of the graph is usually small.
![Page 22: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/22.jpg)
22
Beispiel App - flickr
![Page 23: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/23.jpg)
23
Beispiel App - Anforderung
![Page 24: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/24.jpg)
24
Beispiel App - Implementierung
• flickr API http://ycpi.api.flickr.com/services/feeds/photos_public.gne?tags=berlin
<entry> ! <title>Balkonien, Berlin, 2014.</title> ! <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/schommsen/14968952316/"/> ! <id>tag:flickr.com,2005:/photo/14968952316</id> ! <published>2014-08-21T18:36:13Z</published> ! <updated>2014-08-21T18:36:13Z</updated> ! <author> ! <name>schommsen</name> ! <uri>http://www.flickr.com/people/schommsen/</uri> ! <flickr:buddyicon>http://farm4.staticflickr.com/3759/buddyicons/ [email protected]?1378603265#34398594@N04</flickr:buddyicon> ! </author> ! <link rel="enclosure" type="image/jpeg" href="http://farm6.staticflickr.com/5581/14968952316_f9bb0999d2_b.jpg" /> !.... !!!!
![Page 25: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/25.jpg)
25
Beispiel App - Implementierung View-Item
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ! android:layout_width="match_parent“ android:layout_height="match_parent“> ! <ImageView! android:id="@+id/fli_picture_imageview" ! android:layout_width="280dp" ! android:layout_height="280dp" ! android:layout_centerVertical="true" ! android:layout_centerHorizontal="true" /> ! <ImageView! android:layout_width="40dp" ! android:layout_height="40dp" ! android:id="@+id/fli_authorPic_imageview" ! android:layout_alignParentBottom="true" ! android:layout_alignParentLeft="true" /> ! <TextView ! android:id="@+id/fli_title_textview" ! android:layout_alignParentTop="true" ! android:layout_alignParentLeft="true" /> ! <TextView ! android:textAppearance="?android:attr/textAppearanceSmall“ ! android:id="@+id/fli_date_textview" ! android:layout_alignParentRight="true" ! android:layout_alignParentBottom="true" /> !!</RelativeLayout> !
![Page 26: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/26.jpg)
26
Beispiel App - Implementierung Adapter
@Override !public View getView(int position, View convertView, ViewGroup parent) { !! View view = mInflater.inflate(R.layout.flickr_item_list_entry, parent, false); ! ! ImageView imageView = (ImageView) view.findViewById(R.id.fli_picture_imageview); ! ImageView authorPic = (ImageView) view.findViewById(R.id.fli_authorPic_imageview); ! TextView dateTaken = (TextView) view.findViewById(R.id.fli_date_textview); ! TextView title = (TextView) view.findViewById(R.id.fli_title_textview); !! title.setText(flickrFeedEntry.title); !! Date nowDate = new Date(); ! nowDate.setTime(nowDate.getTime() - flickrFeedEntry.dateTaken.getTime()); ! SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd"); ! dateTaken.setText(simpleDateFormat.format(nowDate) + " Days ago"); !! // ToDo: Image Loading ! return view; !} !!!
![Page 27: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/27.jpg)
27
Beispiel App - Implementierung Adapter – Image Loading
!new ThumbnailTask(position, url,imageView).executeOnExecutor(mExecutor, null); !!!!
• Async Task? Don‘t even think about it!
• Picasso Picasso.with(getContext()).load(flickrFeedEntry.imageURL).transform(new CropSquareTransformation()).into(imageView); !!Picasso.with(getContext()).load(flickrFeedEntry.authorIconURI).transform(new CropSquareTransformation()).into(authorPic); !!
![Page 28: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/28.jpg)
28
Beispiel App - Demo
![Page 29: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/29.jpg)
29
Beispiel App - Implementierung Adapter
public View getView(int position, View convertView, ViewGroup parent) { !! View view = mInflater.inflate(R.layout.flickr_item_list_entry, parent, false); ! ! ImageView imageView = (ImageView) view.findViewById(R.id.fli_picture_imageview); ! ImageView authorPic = (ImageView) view.findViewById(R.id.fli_authorPic_imageview); ! TextView dateTaken = (TextView) view.findViewById(R.id.fli_date_textview); ! TextView title = (TextView) view.findViewById(R.id.fli_title_textview); !! // Image loading here !! title.setText(flickrFeedEntry.title); !! Date nowDate = new Date(); ! nowDate.setTime(nowDate.getTime() - flickrFeedEntry.dateTaken.getTime()); ! SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd"); ! dateTaken.setText(simpleDateFormat.format(nowDate) + " Days ago"); !! return view; !} !!!
![Page 30: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/30.jpg)
30
Analyse – 1 getView
TimingLogger timings = new TimingLogger(TAG, “getView"); !!view = mInflater.inflate(R.layout.flickr_item_list_entry, parent, false); !//... !!timings.addSplit(“find/inflate"); !!//Picasso.with... !!timings.addSplit(“picasso"); !!//textView.setText(...) !!timings.addSplit(“filldata"); !timings.dumpToLog(); !
![Page 31: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/31.jpg)
31
Analyse – 1 getView
D getView: begin !D getView: 4 ms, find/inflate !D getView: 1 ms, picasso !D getView: 1 ms, filldata!D getView: end, 6 ms !!D getView: begin !D getView: 2 ms, find/inflate !D getView: 0 ms, picasso !D getView: 2 ms, filldata!D getView: end, 4 ms !!D getView: begin !D getView: 5 ms, find/inflate !D getView: 1 ms, picasso !D getView: 0 ms, filldata!D getView: end, 6 ms !!
![Page 32: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/32.jpg)
32
Analyse – 1 getView - traceview
![Page 33: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/33.jpg)
33
Analyse – 1 getView - optimiert
public View getView(int position, View convertView, ViewGroup parent) { ! View view = convertView; ! if(view == null) { ! view = mInflater.inflate(R.layout.flickr_item_list_entry, parent, false); ! ViewHolder viewHolder = new ViewHolder(); !! viewHolder.imageView = (ImageView)view.findViewById(R.id.fli_picture_imageview); ! //... ! view.setTag(viewHolder); ! } ! ViewHolder viewHolder = (ViewHolder) view.getTag(); !! //picasso loading... !! viewHolder.title.setText(flickrFeedEntry.title); ! mNowDate.setTime(System.currentTimeMillis() - "
"flickrFeedEntry.dateTaken.getTime()); ! viewHolder.dateTaken.setText(mSimpleDateFormat.format(mNowDate) + DAYS); !! return view; !} !!!
![Page 34: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/34.jpg)
34
App v2 getView - optimiert
![Page 35: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/35.jpg)
35
App v2 getView - optimiert
D getView: 6 ms, find/inflate ! D getView: 0 ms, picasso ! D getView: 1 ms, filldata! D getView: end, 7 ms !! D getView: begin ! D getView: 0 ms, find/inflate ! D getView: 0 ms, picasso ! D getView: 0 ms, filldata! D getView: end, 0 ms !! D getView: begin ! D getView: 0 ms, find/inflate ! D getView: 0 ms, picasso ! D getView: 1 ms, filldata! D getView: end, 1 ms !!
![Page 36: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/36.jpg)
36
App v2 Analyse - Systrace
$> systrace -a de.inovex.samples gfx input view dalvik res sched !
![Page 37: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/37.jpg)
37
App v2 Analyse - Logcat
dalvikvm D GC_FOR_ALLOC freed 5077K, 30% free 19358K/27632K, paused 20ms, total 20ms !! D GC_FOR_ALLOC freed 71K, 19% free 22504K/27632K, paused 16ms, total 16ms !!dalvikvm-heap I Grow heap (frag case) to 25.011MB for 3145744-byte allocation !! dalvikvm D GC_FOR_ALLOC freed 0K, 17% free 25576K/30708K, paused 21ms, total 21ms!
![Page 38: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/38.jpg)
38
App v2 Analyse – Bild-Größen
<link rel="enclosure" type="image/jpeg" href="http://farm6.staticflickr.com/5581/14968952316_f9bb0999d2_b.jpg" /> !!$> curl http://farm6.staticflickr.com/5581/14968952316_f9bb0999d2_b.jpg > out.jpg !!$> identify out.jpg !out.jpg JPEG 600x900 600x900+0+0 8-bit sRGB 183KB 0.000u 0:00.000!
Speicher: 600 x 900 x 4 = 2.2 Megabytes 4 Zeilen à 2 Bilder: ~ 18 MBytes
$> getprop dalvik.vm.heapgrowthlimit!64m !
![Page 39: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/39.jpg)
39
App v2 Analyse – Bild-Größen – Flickr - Doku
https://www.flickr.com/services/api/misc.urls.html!s "small square 75x75 !q "large square 150x150 !t "thumbnail, 100 on longest side !m "small, 240 on longest side !n "small, 320 on longest side !- "medium, 500 on longest side !z "medium 640, 640 on longest side !c "medium 800, 800 on longest side† !b "large, 1024 on longest side* !
![Page 40: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/40.jpg)
40
App v3 Wie groß ist mein ImageView?
int size = Math.max(imageView.getWidth(), imageView.getHeight()); !!
Invalidate Measure & Layout Draw
0,0 320,300
![Page 41: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/41.jpg)
41
App v3 Wie groß ist mein ImageView?
final ViewTreeObserver viewTreeObserver = mGridView.getViewTreeObserver(); !viewTreeObserver.addOnPreDrawListener( !
"new ViewTreeObserver.OnPreDrawListener() { ! @Override ! public boolean onPreDraw() { !
" "if(viewTreeObserver.isAlive()) ! viewTreeObserver.removeOnPreDrawListener(this); !
" "//do things !" "return true; !
} ! }); !
Invalidate Measure & Layout Draw
![Page 42: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/42.jpg)
42
App v3 Wie groß ist mein ImageView?
public class MyImageView extends ImageView { !! @Override! protected void onSizeChanged(int w, int h, int oldw, int oldh) { ! super.onSizeChanged(w, h, oldw, oldh); !
"//use w and h ! } !!!
Invalidate Measure & Layout Draw
![Page 43: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/43.jpg)
43
App v3 Wie groß ist mein ImageView?
!imageView.post(new Runnable() { ! @Override ! public void run() { !
"//Do things ! } !}); !!
Invalidate Measure & Layout Draw
![Page 44: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/44.jpg)
44
App v3 Bilder optimiert
![Page 45: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/45.jpg)
45
App v3 Done?
https://flic.kr/p/nqwvF Flensburger Pilsner | fleno.de
DONE?
Not yet...
![Page 46: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/46.jpg)
46
App v3 Response Cache (API Level 13)
protected void onCreate(Bundle savedInstanceState) { !... ! try { ! File httpCacheDir = new File(context.getCacheDir(), "http"); ! long httpCacheSize = 10 * 1024 * 1024; // 10 MiB ! HttpResponseCache.install(httpCacheDir, httpCacheSize); ! } ! catch (IOException ex) { ! Log.i(TAG, "HTTP response cache installation failed:" + ex); ! } !}!protected void onStop() { ! super.onStop(); ! HttpResponseCache cache = HttpResponseCache.getInstalled(); ! if (cache != null) { ! cache.flush(); ! } !} !!
![Page 47: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/47.jpg)
47
App v3 Cache?
![Page 48: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/48.jpg)
48
App v3 Prost!
https://flic.kr/p/nqwvF Flensburger Pilsner | fleno.de
![Page 49: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/49.jpg)
49
Performance Tipps + Tricks Flache Layout-Hierarchien -> Hierarchy Viewer
![Page 50: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/50.jpg)
https://github.com/JakeWharton/scalpel 50
Performance Tipps + Tricks Flache Layout-Hierarchien -> Scalpel
![Page 51: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/51.jpg)
http://www.sriramramani.com/droidinspector/ 51
Performance Tipps + Tricks Flache Layout-Hierarchien -> Droid Inspector
![Page 52: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/52.jpg)
TODO: URL 52
Performance Tipps + Tricks Overdraw
![Page 53: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/53.jpg)
53
Performance Tipps + Tricks Garbarge Collection -> zu viele Objekte? -> Allocation Tracker
![Page 54: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/54.jpg)
54
Immer 60 FPS
![Page 55: Performance-Optimierung mit und ohne Android Developer Tools · Performance - Optimierung mit und ohne Android Developer Tools Dominik Helleberg Köln - 25.09.2014](https://reader033.fdocument.pub/reader033/viewer/2022043005/5f8c3907dc04363548737fd5/html5/thumbnails/55.jpg)
Danke!