Optymalizacja widoku niestandardowego

Jeśli masz dobrze zaprojektowany widok, który reaguje na gesty i przejścia między stanami, zadbaj o to, by działał szybko. Aby interfejs użytkownika nie zawieszał się lub zacinał podczas odtwarzania, zadbaj o regularne odtwarzanie animacji z prędkością 60 klatek na sekundę.

Przyspieszanie widoku

Aby przyspieszyć przeglądanie, usuń zbędny kod z częstych rutyn. Zacznij od wartości onDraw(), która zapewni Ci największy zwrot. W szczególności eliminuj przydziały w onDraw(), ponieważ mogą one prowadzić do odśmiecania pamięci, które powoduje zacinanie się. Przydzielaj obiekty podczas inicjowania lub między animacjami. Nigdy nie przydziel alokacji podczas animacji.

Oprócz skrócenia zużycia energii onDraw() dopilnuj, aby była ona wywoływana tak często, jak to możliwe. Większość wywołań funkcji onDraw() jest wynikiem wywołania invalidate(), więc eliminuj niepotrzebne wywołania funkcji invalidate().

Kolejną bardzo kosztowną metodą jest przemierzanie układów. Gdy widok wywołuje funkcję requestLayout(), system interfejsu Androida przegląda całą hierarchię widoków, aby sprawdzić, jak duży musi być każdy z nich. Jeśli znajdzie sprzeczne pomiary, może wielokrotnie przejść przez hierarchię. Projektanci interfejsu użytkownika tworzą czasem głębsze hierarchie zagnieżdżonych obiektów ViewGroup. Te szczegółowe hierarchie powodują problemy z wydajnością, dlatego hierarchie widoków powinny być jak najmniejsze.

Jeśli masz złożony interfejs, pomyśl o napisaniu niestandardowego elementu ViewGroup, który wyświetli jego układ. W przeciwieństwie do widoków wbudowanych widok niestandardowy może zakładać specyficzne dla aplikacji założenia dotyczące rozmiaru i kształtu elementów podrzędnych, a tym samym unikać przemierzania elementów podrzędnych w celu obliczania pomiarów.

Jeśli na przykład masz niestandardowy element ViwGroup, który nie dopasowuje swojego rozmiaru do wszystkich swoich widoków podrzędnych, unikniesz konieczności poświęcania czasu na pomiar wszystkich widoków podrzędnych. Ta optymalizacja nie jest możliwa, jeśli korzystasz z wbudowanych układów, które są dostosowane do szerokiej gamy przypadków użycia.