Bardzo długi start aplikacji (8-9 sekund)

  • 7 Odpowiedzi
  • 14470 Wyświetleń
*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Bardzo długi start aplikacji (8-9 sekund)
« dnia: Listopada 14, 2017, 14:36:05 »
Witam,
Mam prośbę do @michal1981, aby wyjaśnić z programistą Android kwestię bardzo długiego startu aplikacji. Na iOS aplikacja startuje w czasie ok 2-3 sekundy nawet na dość starym telefonie jakim jest iPhone 5. Na android start trwa 3-krotnie dłużej. Problem raportuje wielu użytkowników aplikacji na Android (w sklepie Google Play oraz na forum). Myślę, że na wszystkich urządzeniach sprawa wygląda tak samo. Ja przeprowadziłem testy na urządzeniach: Sony Xperia Tablet Z (Android 5.1), Sony Xperia Z3 Compact (Android 6.0.1), Huawei Honor 8 (Android 6.0), Huawei Honor 9 (Android 7.0) oraz Huawei P9 Lite (Android 7.0). Na wszystkich urządzeniach bez względu na wersję androida i podzespoły (nawet na mocarnym Honor 9 z Kirin 960) apliakcja startuje praktycznie tak samo długo.

Wczoraj przeprowadziłem prosty test na swoim telefonie. Zainstalowałem packet sniffer i przechwyciłem pakiety transmisji danych pomiędzy telefonem, a EFC-01. Okazuje się, że od momentu startu aplikacji te 8-9 sekund czasu to...bezczynność. Aplikacja w tym czasie nie komunikuje się z niczym. Dopiero właśnie po upływie tego długiego czasu zaczyna się proces logowania, który z resztą przebiega błyskawicznie (w 0.1 sekundy jest zakończony) i po nim aplikacja pokazuje dobrze znany wszystkim ekran startowy (po zalogowaniu).
Test ten potwierdza moje wcześniejsze przypuszczenia, że samo łączenie z EFC-01 nie trwa tak długo, ponieważ gdy aplikacja utraci połączenie z EFC-01 sygnalizując to ikoną - ponowne tapnięcie na ikonie powoduje natychmiastowe wznowienie połączenia - tak jak sam proces logowania.

Pytanie do @michal1981 - a w zasadzie do programisty aplikacji na Android - co aplikacja robi przez te 8 sekund??? Dlaczego ładowanie zajmuje tyle czasu?? Na co ten czas jest tracony? Dodam, że mam zapamiętane dane logowania, więc wykluczam, aby aplikacja próbowała w tym czasie szukać kontrolera EFC-01. A jeśli szuka - to jest to wg. mnie błędne i niepotrzebne działanie.

Wg mnie jest to rzecz nie do zaakceptowania jeśli chodzi o aplikację i to musi zostać poprawione. Aplikacja działając w tle jest energochłonna, co już także wiele osób zgłaszało, więc jako workaround (problem baterii pewnie będzie trudniejszy w eliminacji niż logowanie) po wyłączeniu aplikacji i ponownym jej uruchomieniu niech chociaż ładuje się szybko.

Proszę o odpowiedź. Być może to mała rzecz, którą można poprawić natychmiast i kolejne wydanie aplikacji (które mam nadzieję zobaczymy szybciej niż poprzednie) doda tą poprawkę i aplikacja zacznie się ładować w rozsądnym czasie 2-3 sekund jak na iOS.

Pozdrawiam
« Ostatnia zmiana: Listopada 14, 2017, 16:25:23 wysłana przez admin »
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

Odp: Bardzo długi start aplikacji (8-9 sekund)
« Odpowiedź #1 dnia: Listopada 22, 2017, 06:28:13 »
Witam,
Pracujemy nad tym - z informacji, które otrzymałem uda się to poprawić, aby działanie było takie same jak w przypadku aplikacji iOS.

Odp: Bardzo długi start aplikacji (8-9 sekund)
« Odpowiedź #2 dnia: Grudnia 01, 2017, 05:50:40 »
Trzymamy kciuki.

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Bardzo długi start aplikacji (8-9 sekund)
« Odpowiedź #3 dnia: Stycznia 26, 2018, 15:03:05 »
Jest nadzieja na rozwiązanie tego problemu. Oto cytat z maila od P. Michała Tyca:
Cytuj
Dodatkowo w aplikacji będą poprawione niektóre błędy zgłaszane na forum ( na przykład szybsze uruchamianie aplikacji, zmniejszenie zużycia energii itp. )

Aktualizacja ma wyjść "początkiem lutego".
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Bardzo długi start aplikacji (8-9 sekund)
« Odpowiedź #4 dnia: Kwietnia 14, 2018, 10:14:45 »
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.
« Ostatnia zmiana: Kwietnia 14, 2018, 10:29:40 wysłana przez admin »
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

Odp: Bardzo długi start aplikacji (8-9 sekund)
« Odpowiedź #5 dnia: Kwietnia 22, 2018, 11:50:02 »
Witam

Taki sam problem występuje przy dostępie do kontrolera spoza sieci wewnętrznej (w moim przypadku przez zewnętrzny adres IP i przekierowanie portu). Aplikacja wyszukuje kontroler, co oczywiście kończy się niepowodzeniem (a trwa te ok. 8s), po czym wyświetla ekran logowania, gdzie kliknięcie na Zaloguj powoduje natychmiastowe połączenie po adresie ustawionym w polu Zaawansowane. To koniecznie musi się zmienić zgodnie z rozwiązaniem proponowanym przez admina - najpierw próba połączenia po ustawionych danych, a ewentualnie później wyszukiwanie kontrolera. Sugerowałbym pójść jeszcze dalej i w opcjach aplikacji (np. w Ustawieniach sieciowych) dodać możliwość wybrania zachowania aplikacji - czy przy starcie ma wyszukiwać kontroler (przydatne dla osób które pozostawiły opcję adresu IP kontrolera z serwera DHCP) czy od razu łączyć się po wprowadzonym adresie IP/domenie.
A co ciekawe poprzednia wersja aplikacji lepiej sobie z tym radziła - uruchamianie trwało oczywiście tak samo długo zarówno wewnątrz sieci lokalnej jak i spoza niej, jednak w przypadku dostępu zdalnego aplikacja logowała się automatycznie, nie było konieczności klikania na Zaloguj...

Nie wiem od czego to może zależeć, ale u mnie aplikacja w sieci lokalnej uruchamia i loguje się zawsze tak samo szybko (1-2s), niezależnie czy jest uruchamiana raz za razem, czy w nieregularnych odstępach czasu (telefon z androidem 7.0).

Odp: Bardzo długi start aplikacji (8-9 sekund)
« Odpowiedź #6 dnia: Kwietnia 23, 2018, 23:10:04 »
Potwierdzam u mnie to samo.
Łącze się po swoim IP zew. stałym i po kilku sekundach muszę klikać na zaloguj. Czasem jeszcze wyskoczy komunikat wystąpił błąd wtedy muszę ręcznie "zabić" aplikacje a potem jak wyżej poczekać kilka sekund i kliknąć zaloguj

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Bardzo długi start aplikacji (8-9 sekund)
« Odpowiedź #7 dnia: Kwietnia 24, 2018, 09:47:50 »
Witajcie
Jeśli ten sam problem występuje w dostępnie zdalnym DDNS,a tym bardziej także przy stałym IP (nie mam jak przetestować, ale na logikę to faktycznie tak będzie) - to w takim razie uważam, że to koniecznie trzeba zmienić.

Mam jeszcze jedną propozycję usprawnienia zaczerpniętą z aplikacji Synology. Gdy podczas logowania (obracające się kółeczko) wciśnie się androidowy przycisk "Cofnij" to logowanie może być przerwane i ukaże się ekran logowania. To na wypadek gdyby np ostatnie logowanie wykonywane było z danymi lokalnymi, a my uruchamiamy aplikację poza swoją siecią wiedząc, że logowanie się nie uda. Nie musielibyśmy wtedy czekać na multicast (który też się nie uda) tylko od razu możnaby przełączyć się na zakładkę "Dostęp zdalny" i ponowić próbę logowania, które zakończyłoby się błyskawicznie.

Po przestudiowaniu kodu aplikacji wydaje mi się, że wprowadzenie tych zmian to na prawdę dość prosta sprawa.
« Ostatnia zmiana: Kwietnia 24, 2018, 10:22:02 wysłana przez admin »
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant