Optymalizacje aplikacji mobilnych

28
OPTYMALIZACJE APLIKACJI MOBILNYCH Maciej Węglarczyk Senior Software Engineer WWW.GANYMEDE.EU

Transcript of Optymalizacje aplikacji mobilnych

Page 1: Optymalizacje aplikacji mobilnych

OPTYMALIZACJE APLIKACJI MOBILNYCH

Maciej WęglarczykSenior Software Engineer

WWW.GANYMEDE.EU

Page 2: Optymalizacje aplikacji mobilnych

CO OPTYMALIZUJEMY?

Wersja Kryptonim API Dystrybucja

2.2 Froyo 8 0.4%

2.3.3 – 2.3.7 Gingerbread 10 6.9%

4.0.3 – 4.0.4 Ice Cream Sandwich 15 5.9%

4.1.x

Jelly Bean

16 17.3%

4.2.x 17 19.4%

4.3 18 5.9%

4.4 KitKat 19 40.9%

5.0 Lollipop 21 3.3%

Wersja OpenGL ES Dystrybucja

2.0 67.5%

3.0 32.5%

Żródło: http://developer.android.com/about/dashboards/index.html

Page 3: Optymalizacje aplikacji mobilnych

OPTYMALIZACJA WYDAJNOŚCI

1

Page 4: Optymalizacje aplikacji mobilnych

CO TO ZNACZY „WYDAJNIE”

Blisko 60 FPS (klatek na sekundę)Na renderowanie 1 klatki jest 0.01(6)s = ~17ms

• W tym obliczenia• W tym przerzucenie danych do

karty graficznej• W tym rysowanie

Page 5: Optymalizacje aplikacji mobilnych

ALGORYTMY

„Premature optimization is the root of all evil”D. Knuth

Cięższe obliczenia w osobnych wątkachZlokalizować wąskie gardła

Page 6: Optymalizacje aplikacji mobilnych

PROFILER

Page 7: Optymalizacje aplikacji mobilnych

PROFILER Z KODU

Debug.startMethodTracing(„my_trace”);// ...Debug.stopMethodTracing();

adb pull /sdcard/my_trace.trace /tmptraceview /tmp/my_trace

Page 8: Optymalizacje aplikacji mobilnych

GARBAGE COLLECTORW grach - twój wróg

Czas Tag Wiadomość

04-07 12:03:32.572:

D/dalvikvm(1155): WAIT_FOR_CONCURRENT_GC blocked 53ms

04-07 12:03:32.792:

D/dalvikvm(4001): GC_CONCURRENT freed 1541K, 9% free 55437K/60432K, paused 6ms+5ms, total 45ms

04-07 12:03:33.133:

D/dalvikvm(910): GC_EXPLICIT freed 987K, 24% free 77193K/101164K, paused 5ms+18ms, total 219ms

04-07 12:03:33.593:

D/dalvikvm(17788): GC_CONCURRENT freed 474K, 13% free 51228K/58828K, paused 9ms+4ms, total 38ms

04-07 12:03:35.225:

D/dalvikvm(910): GC_EXPLICIT freed 461K, 24% free 77108K/101164K, paused 13ms+16ms, total 236ms

Page 9: Optymalizacje aplikacji mobilnych

PRZERYSOWANIA GPU

Opcja w ustawieniachOptymalizacja layoutu

Page 10: Optymalizacje aplikacji mobilnych

HIERARCHY VIEWER

Page 11: Optymalizacje aplikacji mobilnych

OPTYMALIZACJA PAMIĘCI

2

Page 12: Optymalizacje aplikacji mobilnych

BITMAPY

Rozmiar na dysku =/= rozmiar w pamięci

Grafika full hd to:1920 x 1080 x 4B = 8 294 400B

Page 13: Optymalizacje aplikacji mobilnych

PALETA!

Paleta RGB565 jest dobra dla teł

1920 x 1080 x 2 = 4 147 200B

BitmapFactory.Options options = new BitmapFactory.Options();options.inPreferredConfig = Bitmap.Config.RGB_565;bmp = BitmapFactory.decodeResource(getResources(), R.drawable.my_bitmap, options);

Page 14: Optymalizacje aplikacji mobilnych

MEMORY MONITOR

Page 15: Optymalizacje aplikacji mobilnych

GĘSTOŚĆ PIKSELI

Foldery drawable-<dpi> [Android]Suffiksy @2x~ipad itp. [iOS]

Page 16: Optymalizacje aplikacji mobilnych

WCZYTYWANIE DUŻYCH BITMAP #1

public Bitmap loadScaledDownPhoto(String path) {final BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;BitmapFactory.decodeFile(path, options);options.inSampleSize = calculateInSampleSize(options, MAX_WIDTH, MAX_HEIGHT);

options.inJustDecodeBounds = false;return BitmapFactory.decodeFile(path, options);

}

Page 17: Optymalizacje aplikacji mobilnych

WCZYTYWANIE DUŻYCH BITMAP #2

private int calculateInSampleSize( BitmapFactory.Options options, int reqWidth, int reqHeight) {final int height = options.outHeight;final int width = options.outWidth;int inSampleSize = 1; // inSampleSize powinno być w potędze 2

if (height > reqHeight || width > reqWidth) {// …

}

return inSampleSize;}

Page 18: Optymalizacje aplikacji mobilnych

OPTYMALIZACJA ROZMIARU APKI

3

Page 19: Optymalizacje aplikacji mobilnych

APK SPLITandroid {

//...splits {

density {enable trueexclude "ldpi", "tvdpi", "xxhdpi", "xxxhdpi"compatibleScreens 'normal', 'large', 'xlarge'

}}

}

Page 20: Optymalizacje aplikacji mobilnych

IMAGEOPTIM / TEXTUREPACKER

Kompresja grafik średnio o 40-50%Pozbycie się danych EXIFAtlasy tekstur

Page 21: Optymalizacje aplikacji mobilnych

IMAGEOPTIM

Page 22: Optymalizacje aplikacji mobilnych

PROGUARD

Główny cel - obfuskacja…ale przy okazji i zmniejszenie binarkiUtrudnia debugowanie

Page 23: Optymalizacje aplikacji mobilnych

INNE

android:installLocation="auto"

compile 'com.google.android.gms:play-services:7.0.0‚compile 'com.google.android.gms:play-services-games:7.0.0'

Page 24: Optymalizacje aplikacji mobilnych

POMOCNICZE NARZĘDZIA

4

Page 25: Optymalizacje aplikacji mobilnych

NETLIMITER

Ograniczenie prędkości łączaOptymalizacja protokołu

Page 26: Optymalizacje aplikacji mobilnych

WOLNE URZĄDZENIE

Warto mieć najsłabsze urządzenie, które się wspiera (zarówno hardware / software)Emulator nie wystarcza

Page 27: Optymalizacje aplikacji mobilnych

INTEGRACJA Z C++ (JNI)

Wzrost wydajności?Narzut komunikacyjnyDebugowanie nadal niełatwe

Page 28: Optymalizacje aplikacji mobilnych