2012-12-01 17 views
9

Opracowałem i przetestowałem aplikację na Androida 3.2, która współdziała z bazą danych SQLite i wyświetla wyniki na ekranie. Nie mam animacji ani niczego nadzwyczajnego. Mam wiele list Viewów, aby wyświetlać dane użytkownikowi.Moja aplikacja znacznie wolniej na Androida 4.0

Baza danych aplikacji jest bardzo duża, a tabele soma mają ponad 300 tys. Wierszy. Staraliśmy się używać AsyncTask w każdej interakcji z bazą danych, ale są pewne punkty, które musimy jeszcze zoptymalizować.

Problem polega na tym, że firma zaktualizowała niektóre tablety do Ice Cream Sandwich, a aplikacja jest znacznie wolniejsza niż na Honeycomb. Załadowałem ten sam kod, z tą samą db, w dwóch urządzeniach, jednym z uruchomionym ICS, a drugim z Honeycomb. Aplikacja działała znacznie lepiej w urządzeniu 3.2. Próbowałem również używać <uses-sdk android:minSdkVersion="14" />, ale nie zrobiło to lepiej.

Czy jest coś, co mógłbym zrobić, aby zoptymalizować wydajność w wersji 4.0? Chciałbym również wiedzieć, dlaczego tak się stało i czy jest coś, co mogłoby to spowodować (jakiś komponent lub klasa, która nie działa tak dobrze w wersji 4.0).

Dzięki!

AKTUALIZACJA: Znalazłem rozwiązanie dla głównego ekranu mojej aplikacji. Przedstawiłem fragment, który działał jako lista pozioma, to był HorizontalScrollView, który załadował ogromną listę danych i stworzył wiele LinearLayout, które mają być prezentowane wewnątrz ScrollView. Znalazłem widżet z HorizontalListView i użyłem go do załadowania mojej listy. Właśnie to sprawiło, że aplikacja była szybsza. Ale nie znalazłem odpowiedzi na pytanie, dlaczego w ICS było wolniej.

Próbowałem również profilowania aplikacji, ale jest to bardzo trudne, wiele informacji. Prawdopodobnie nadal będę to robił w ciągu najbliższych tygodni, aby przyspieszyć aplikację. Dziękuję za wszystkie odpowiedzi i komentarze!

+0

Czy sprawdziłeś rozmiar sterty za pomocą narzędzi DDMS na obu urządzeniach? – Talha

+3

Zanim przejdziemy do konkluzji, powinieneś [profilować swoją aplikację] (http://developer.android.com/tools/debugging/debugging-tracing.html) na obu urządzeniach, zobaczyć, gdzie znajduje się wąskie gardło. – Felix

+1

Zapytałem, ponieważ wcześniej spotkałem się z tym samym problemem. Tak więc wielkość sterty dalvik vm jest ustawiona w pliku preferencji /system/build.prop na każdej wersji/urządzeniu Android. Dokładny klucz preferencji to dalvik.vm.heapsize. Wartość jest w megabajtach i zależy od możliwości urządzenia. Z tego powodu Twoja aplikacja może działać inaczej na różnych urządzeniach. – Talha

Odpowiedz

Powiązane problemy