2012-12-11 15 views
8

Wydaje mi się, że mam nierozwiązywalny problem, spędziłem weekend na nim, nie mogłem go naprawić. Kiedy tworzę prostą aplikację testową z dwiema czynnościami: 1. Główna aktywność: kilka przycisków, minutnik (wątek tła) i lekkie żądanie do bazy danych SQLite. 2. Druga aktywność: kilka przycisków, tylko jeden ma odbiornik kliknięcia, po kliknięciu go po prostu wracasz do pierwszego działania. Używam dużych przycisków (szerokość ekranu około jednej czwartej wysokości ekranu), zasoby układu xml nie zawierają zagnieżdżonych elementów wagowych ani innych egzotycznych elementów.Wydajność Androida na poziomie 11 i wyższym

Jest to projekt testowy, nie ma innych funkcji.

Mam następujący poważny problem: - kiedy ustawiam poziom API w pliku manifestu na 3, wszystko działa idealnie. (ekran automatycznie w trybie zgodności) - po ustawieniu poziomu api na poziomie 11 lub wyższym, załadowanie drugiego działania może zająć do 10 sekund. Po pierwszym otwarciu drugiego działania rzeczy wydają się być buforowane, opóźnienie już nie istnieje. - kiedy ustawiam poziom api na 11 lub wyższy i wymuszam tryb zgodności (res ekranu): bez zmian, opóźnienie pozostaje.

Zbudowałem ten projekt testowy, ponieważ napotkałem ten problem podczas uaktualniania starszej aplikacji. Płynnie działał na starszych poziomach api, gdy tylko wprowadzę go na Androida w wersji 3 lub wyższej, opóźnia się do 25 sekund! (nawet w przypadku otwierania działania wyświetlającego tylko tekst statyczny ...).

Testuję na nowej karcie Galaxy, która nie może być problemem. Spędziłem wiele godzin szukając rozwiązania, nigdy niczego nie znajdując. Nawet całkowicie odinstalowałem Eclipse i wszystkie zasoby androidów i zaktualizowałem wszystko (łącznie z przywróceniem ustawień fabrycznych karty Galaxy Tab). Brak szczęścia.

Zrobiłem ślad, problem jest w GLES20Canvas.nDrawDisplayList. Wydaje się, że tworzenie tej listy zajmuje dużo czasu, nawet jeśli nie ma wiele do zrobienia ...

Czy ktoś ma pojęcia, jak mogę to rozwiązać?

Dzięki, Martin

Odpowiedz

1

GLES20Canvas.nDrawDisplayList

kiedy to przychodzi to expected to have a large portion of the time if you are drawing a lot, especially very big views.

Chciałbym dać Ci link do Zalecenia i Dont użytkownika z android-30-hardware-acceleration

+1

Dzięki.Czytałem ten artykuł wcześniej i eksperymentowałem. Brak szczęścia. Faktem jest, że nawet prosty tekst wymaga sekund do renderowania (nic więcej w układzie). Jedynym rozwiązaniem, które udało mi się znaleźć, jest wyłączenie akceleracji sprzętowej. – martin

+0

Romain Guy jest po prostu apologetą Google'a i nie można mu zawracać sobie głowy rozwiązywaniem problemów, z jakimi borykają się deweloperzy. – StackOverflowed

3

Znalazłem rozwiązanie tego problemu poprzez analizę tego posta: http://code.google.com/p/android/issues/detail?id=22514

Rozwiązaniem jest wyłączenie akceleracji sprzętowej.

W AndroidManifest.xml w tagu aplikacji, dodać:

android:hardwareAccelerated="false" 

Teraz wszystko działa znowu gładkie. Niestety przyspieszenie sprzętowe nie przyspiesza uruchamiania aplikacji.

+0

Możesz nie chcieć wyłączyć akceleracji sprzętowej dla wszystkich urządzeń, zobacz -> http://stackoverflow.com/a/21791909/546901 Zauważyłem tylko ten problem na jednym urządzeniu, HTC jeden. Wyniki śledzenia pokazują, że problem dotyczy nDrawDisplayList. Wyniki śledzenia dla każdego innego urządzenia, które wypróbowałem, są w porządku. Wydaje się to sugerować błąd urządzenia lub systemu operacyjnego, a nie błąd z kodem aplikacji. Wydaje się łatwe do odtworzenia z niskim widokiem list lub przewijaniem na urządzeniach, które ludzie zgłaszają widząc ten problem (HTC One lub Galaxy Nexus). –

Powiązane problemy