Przycisk Wstecz bardzo wolno
Mam aplikację na Androida z TabActivity zawierającą 4 karty - widok listy, widok mapy, inną listę i przeglądarkę internetową. Z widoku listy mogę stuknąć element i rozpoczyna się kolejna aktywność, naciśnięcie wstecz powoduje powrót do aktywności karty.
Jednak po odwiedzeniu karty widoku mapy przejście do drugiego działania z widoku listy, a następnie naciśnięcie przycisku wstecz powoduje zawieszenie na około 3-4 sekundy. Po odwiedzeniu widoku mapy problem ten nigdy nie zniknie, dopóki aplikacja nie zostanie zamknięta.
Jeszcze kilka uwag:
Widok mapy może również uruchamiać inną czynność - w tym przypadku przycisk Wstecz działa prawidłowo - tylko wtedy, gdy karta widoku mapy jest nieaktywna, gdy uruchamiane jest drugie działanie, w którym wystąpił problem.Testowanie na dwóch urządzeniach - problem występuje w Galaxy S, nie występuje w Nexys 7.Logcat nie widzi nic oczywistego.Aplikacja korzysta z Map API V2 i obsługuje lib do obsługi fragmentów.Aplikacja jest napisana w Mono.Więcej informacji. Wpisałem kilka komunikatów dziennika na temat aktywności na mapie dla zdarzeń cyklu życia:
Przełączanie z karty mapy:
02-12 18:53:43.841 I/MAPTEST ( 5031): OnSaveInstanceState
02-12 18:53:43.857 I/MAPTEST ( 5031): OnPause
Uruchamianie drugiego działania z karty widoku listy:
02-12 18:54:06.900 I/MAPTEST ( 5031): OnSaveInstanceState
virtual void WebCore::Widget::show()
virtual void WebCore::Widget::show()
void WebCore::ScriptController::updatePlatformScriptObjects()
virtual void WebCore::Widget::show()
static bool WebCore::ResourceHandle::supportsBufferedData()
static bool WebCore::ResourceHandle::supportsBufferedData()
02-12 18:54:07.353 I/MAPTEST ( 5031): OnStop
Naciśnięcie przycisku Wstecz od drugiej czynności (tj .: gdy nastąpi przerwa):
-- Absolutely nothing in log cat --
Powrót do karty mapy:
02-12 18:54:59.056 I/MAPTEST ( 5031): OnRestart
02-12 18:54:59.060 I/MAPTEST ( 5031): OnStart
02-12 18:54:59.064 I/MAPTEST ( 5031): OnResume
Co może spowodować powrót do aktywności do zablokowania na 3-4 sekundy?
Alternatywnie, co jeszcze mogę zrobić, aby to zdiagnozować?
Więcej informacji:
Zgodnie z komentarzem michal-z, profilowałem go pod DDMS i większość czasu spędzałem na wysyłaniu wiadomości, układaniu i rysowaniu ... więc jestem podejrzliwy wobec jakiegoś rekurencyjnego układu lub problemu z rysowaniem ...
Próbowałem też usunąć fragment mapy, gdy aktywność mapy została zatrzymana i dodając ją z powrotem, gdy aktywność mapy zostanie uruchomiona, a to rozwiązało problem opóźnienia, ale mapa nie pamięta jego stanu, traci wszystkie swoje znaczniki i powraca ponownie.
Kolejna obserwacja:
Thetylko rozwiązaniem, które mogłem znaleźć, jest usunięcie fragmentu, gdy aktywność jest zatrzymana i dodanie go z powrotem po wznowieniu - a także zapisanie pozycji kamery. Próbowałem też ukryć i ponownie pokazać fragment zarówno za pomocą menedżera fragmentów, jak i bezpośrednio w widoku mapy - bez powodzenia.