W mojej aplikacji mam do czynienia z dużą ilością danych pochodzących z sieci i parsować ją w zoptymalizowany format lokalny, a następnie zapisać je do bazy danych lub wysłać je do interfejsu użytkownika, jeśli istnieje Interfejs użytkownika czeka na te dane.iOS: Jak debugować opóźnienie interfejsu użytkownika [iPad2 dual-core]
Wiem, że wykonywanie ciężkiej analizy w głównym wątku jest głupie, ponieważ blokuje główny wątek i powoduje, że interakcja interfejsu użytkownika jest dość zła.
Więc tutaj jest to, co starałem się upewnić, że wątek UI jest wolny.
- Globalna optymalizacja usunąć bardzo powolny kod pomimo tego, co jest w wątku
Dolna wszystkie priorytety wątku, tj
NSOperation.threadPriority=0.1; NSThread.threadPriority=0.1; dispatch_async(dispatch_get_global_queue(PRIORITY_LOW));
Po tych dwóch etapach, UI jest bardziej gładka, gdy niektórzy ciężka praca jest wykonywana w tle wątków, ale wciąż całkiem podniecony.
Błąd wygląda następująco: Gdy przewijam stół dość płynnie i nagle stół zamarza na około 0,1 sekundy, a następnie działa równie płynnie jak zwykle. Podczas zamrażania widzę impuls procesora w Instrumentach. Ale w osobnym widoku wątku widzę, że główny wątek jest OK, prawie bez zużycia procesora.
- Dlaczego więc tabela interfejsu użytkownika nadal się zawiesza?
- A dlaczego wątki tła nadal wykonują tyle cykli procesora przy tak ustawionych priorytetach wątków?
- W jaki sposób upewniacie się, że interfejs użytkownika zawsze reaguje?
- Czy są jakieś przydatne narzędzia do wyróżnienia miejsc powodujących zamrożenie interfejsu użytkownika?
Najlepszym sposobem jest zrobić coś podobnego aplikacji twitter robi. są implementacje, które mogą ci w tym pomóc. [http://blog.leahculver.com/2010/07/iphone-pull-to-refresh.html] – Ashishail
@Ashishail Dzięki za komentarz. Pobranie w celu odświeżenia jest dobrym sposobem na zminimalizowanie ruchu, który nie jest odpowiedni dla mojej aplikacji, ponieważ musi działać w trybie offline. –
ohh ok, pomyślałem, że ur przychodzisz z sieci, dla lokalnych jest wiele rzeczy, które możesz zrobić.sprawdź, czy twoja_własna_przekiernia_zdrowia wraca tak szybko, jak to możliwe. używaj wstępnie wypełnionych tablic, jeśli rekordy ur są w setkach grzywny. jeśli w tysiącach, możesz dokonać wstępnego pobrania na podstawie ostatniego wiersza nazwanego. więc np. najpierw zdobądź 100 wierszy, gdy 50-ty wiersz zostanie wywołany otrzymasz 100 więcej, n tak dalej. – Ashishail