2012-08-28 18 views
20

Używam tej samej aplikacji internetowej na Androidzie pod PhoneGap i pod wbudowaną przeglądarką. Aplikacja działa dobrze na wbudowanej przeglądarce, ale jest niewiarygodnie powolna w PhoneGap. Nawet podstawowe przewijanie na stronie zacina się w PhoneGap.Dlaczego PhoneGap jest wolniejszy od przeglądarki?

Czy jest coś ogólnie, co mogę robić źle? Miałem wrażenie, że PhoneGap używa tego samego renderera WebKit co zwykła aplikacja Browser, więc dlaczego ten sam HTML i JavaScript działałby znacznie wolniej w PhoneGap?

P.S. To było asked before, ale ze względu na sformułowanie myślę, że pierwotne pytanie zostało źle zrozumiane.

+0

Ten sam problem dotyczy! Jakieś rozwiązanie do budowy Phonegapa? – byJeevan

Odpowiedz

16

mogę mieć przypadkowo natknął się na odpowiedź na to. Okazuje się, że aplikacje, nad którymi pracowałem, miały ustawioną wartość android:targetSdkVersion w naprawdę niskiej wartości (tj. Moja docelowa wersja Androida była podobna do wersji 2.2). Zwiększenie tego do 14 (Android 4.0) wydaje się znacznie poprawić wydajność PhoneGap, przynajmniej na nowszych urządzeniach z Androidem z systemem ICS lub Jelly Bean.

Ustawienie niskiego poziomu targetSdkVersion wydaje się wyłączać przynajmniej niektóre ulepszenia wydajności wprowadzone w nowszych wersjach Androida.

Jeśli chcesz zobaczyć duży wzrost wydajności w PhoneGap, upewnij się, że targetSdkVersion pasuje do maksymalnej wersji SDK obsługiwanej przez telefon, na którym testujesz.

7

nie wiem PhoneGap, ale można spróbować to:

  • Dodawanie android:hardwareAccelerated="true" w oczywisty
  • Jeśli używasz WebView webview.getSettings().setRenderPriority(RenderPriority.HIGH); i webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
+0

Czy jest jakiś znacznik do dodania tego/te – Lekhnath

+1
2

Jest to sprzeczne z intuicją, ale w rzeczywistości może być konieczne wyłączenie przyspieszenia sprzętowego dla swojej przeglądarki internetowej. Akceleracja sprzętowa od wersji Androida 4.0.4 nie powoduje niczego w przypadku obrazów canvas i innych przerysowań, ale w rzeczywistości usuwa zasoby procesora dla tych zdarzeń.

spróbuj dodać następujący wiersz kodu w pliku aplikacji Java:

super.setLayerType (View.LAYER_TYPE_SOFTWARE, null);

Ustaw również Android: hardwareAccelerated = "false" w manifeście.

+0

To rozwiązało niektóre z moich problemów z renderowaniem i przyspieszyło moją aplikację. Dziwne. – TWilly

+0

czy możesz podać więcej szczegółów –

0

Dokładnie to samo przeżyłem! Poprzednio używałem systemu Android 3.x do testowania. Jak tylko uaktualniłem do wersji 4.4.2, moje płótno nie działało wolno! Patrząc na oś czasu renderingu, mogłem zobaczyć wiele wywołań rasteryzacji, które trwały ponad 100 ms i zmniejszały mój FPS do około 8! Android: hardwareAccelerated = "false" rozwiązało moje problemy. Czy istnieje sposób ustawienia hardwareAccelerated = "true" w zależności od wersji Androida?

Powiązane problemy