Po kilkudniowych testach mój początkowy hurraoptymizm co do tego aspektu nieco jednak przybladł.
Owszem - różnica w czasie startu "od zera" jest zdecydowana, ale start odbywa się bardzo szybko (2-3 sekundy) tylko w jednym przypadku: gdy zamykam i ponownie uruchamiam aplikację raz za razem. W praktyce gdy sięga się po nią co jakiś czas i gdy telefon zostanie w międzyczasie zablokowany to ponowne jej otwarcie trwa już mniej więcej 5-7 sekund. Owszem szybciej, ale już nie 2-3. Czas startu jest w tym przypadku nierówny.
Aplikacja w typowym use case jednak nadal mocno odstaje od jej wersji na iOS, gdzie czas startu w moim przypadku jest niemal stały i dość krótki. Ilekroć startuję wersję iOS "od zera" - ekran po zalogowaniu ukazuje się w czasie ok 2 sekund.
Można się spierać czy to wina samej platformy. Na pewno są różnicę między Androidem a iOS, ale myślę, że to kwestia lepszej lub gorszej znajomości danej platformy, aby osiągnąć zbliżone rezultaty.
Jedną z rzeczy które są dla mnie niezrozumiałe w przypadku tej aplikacji jest to, że do logowania "od zera" każdorazowo używane jest rozwiązanie IP multicast. Tak wynika z mojej analizy kodu aplikacji oraz samej obserwacji jej zachowania. Jedno z drugim wydaje się zbieżne, więc wnioski moim zdaniem są prawidłowe. Zauważcie, że przy starcie "od zera" zawsze widzimy komunikat "Znaleziono kontroler". A komunikat ten ukazuje się właśnie po uruchomieniu mechanizmu multicast, który ma za zadanie zlokalizowanie kontrolera (jego IP i portu) w naszej sieci domowej.
Właśnie multicast obwiniany był poprzednio za długi start aplikacji, gdyż podobno na Androidzie jest to zaimplementowane inaczej niż na iOS. Nie sprzeczam się bo znawcą w tym temacie nie jestem. Prawda jest jednak taka, że właśnie jego zastosowanie spowalnia cały proces.
Ważniejsze jest dla mnie natomiast - po co w ogóle korzystać z multicastu jeśli aplikacja "trzyma" zapamiętany adres IP i port kontrolera??? Z mojego pobieżnego przestudiowania kodu wynika, że aplikacja korzysta z tych danych jedynie, gdy widzimy przed sobą na ekranie ekran logowania z użytkownikiem i hasłem do potwierdzenia. Jak dla mnie - bez sensu, że aplikacja nie korzysta z tych danych zawsze, gdyż dzięki temu mogłaby startować zawsze w ciągu ok 2 sekund jak na iOS. Tyle na Androidzie trwa połączenie się z kontrolerem i ukazanie głównego ekranu aplikacji od momentu wciśnięcia przycisku "Zaloguj".
Zamelu - czy nie możecie tego w aplikacji zmienić? Z czego wynika użycie multicastu pomimo posiadania przez aplikację podanego przez użytkownika adresu IP i portu kontrolera?? Użycie multicastu powoduje kolejny problem przy korzystaniu z aplikacji poprzez VPN gdzie multicast się nie uda. Wtedy logowanie trwa znacznie dłużej, gdyż najpierw proces multicast musi się zakończyć - zahardkodowane 8 sekund i dopiero po tym czasie ukazuje się ekran logowania z gotowymi danymi, a wciśnięcie przycisku "Zaloguj" od razu umożliwia zalogowanie. Zupełnie be z senu.
Moja proponowana zmiana w tym temacie: gdy aplikacja nie dysponuje danymi IP+port - odnaleźć kontroler przez multicast. Gdy te dane jednak są - skorzystać z nich i gdy np próba zalogowania pod podanym adresem IP będzie nieudana - dopiero wtedy wywołać poszukiwanie kontrolera przez multicast.
Dla mnie takie rozwiązanie miałoby zdecydowanie więcej sensu, nie mówiąc już o poprawie czasu logowania do absolutnego minimum.