Optymalizacje aplikacji mobilnych
-
Upload
ganymede-academy -
Category
Technology
-
view
93 -
download
0
Transcript of Optymalizacje aplikacji mobilnych
OPTYMALIZACJE APLIKACJI MOBILNYCH
Maciej WęglarczykSenior Software Engineer
WWW.GANYMEDE.EU
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
OPTYMALIZACJA WYDAJNOŚCI
1
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
ALGORYTMY
„Premature optimization is the root of all evil”D. Knuth
Cięższe obliczenia w osobnych wątkachZlokalizować wąskie gardła
PROFILER
PROFILER Z KODU
Debug.startMethodTracing(„my_trace”);// ...Debug.stopMethodTracing();
adb pull /sdcard/my_trace.trace /tmptraceview /tmp/my_trace
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
PRZERYSOWANIA GPU
Opcja w ustawieniachOptymalizacja layoutu
HIERARCHY VIEWER
OPTYMALIZACJA PAMIĘCI
2
BITMAPY
Rozmiar na dysku =/= rozmiar w pamięci
Grafika full hd to:1920 x 1080 x 4B = 8 294 400B
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);
MEMORY MONITOR
GĘSTOŚĆ PIKSELI
Foldery drawable-<dpi> [Android]Suffiksy @2x~ipad itp. [iOS]
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);
}
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;}
OPTYMALIZACJA ROZMIARU APKI
3
APK SPLITandroid {
//...splits {
density {enable trueexclude "ldpi", "tvdpi", "xxhdpi", "xxxhdpi"compatibleScreens 'normal', 'large', 'xlarge'
}}
}
IMAGEOPTIM / TEXTUREPACKER
Kompresja grafik średnio o 40-50%Pozbycie się danych EXIFAtlasy tekstur
IMAGEOPTIM
PROGUARD
Główny cel - obfuskacja…ale przy okazji i zmniejszenie binarkiUtrudnia debugowanie
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'
POMOCNICZE NARZĘDZIA
4
NETLIMITER
Ograniczenie prędkości łączaOptymalizacja protokołu
WOLNE URZĄDZENIE
Warto mieć najsłabsze urządzenie, które się wspiera (zarówno hardware / software)Emulator nie wystarcza
INTEGRACJA Z C++ (JNI)
Wzrost wydajności?Narzut komunikacyjnyDebugowanie nadal niełatwe