Duże zużycie energii przez aplikację w tle

  • 14 Odpowiedzi
  • 12457 Wyświetleń
*

Offline admin

  • *****
  • 1443
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Duże zużycie energii przez aplikację w tle
« dnia: Listopad 18, 2017, 22:40:41 »
Witam,
Jak raportuje wielu użytkowników (w tym ja) i na forum i w opiniach Google Play Store - aplikacja zużywa sporo energii działając w tle. Teoretycznie nic nie powinna wtedy robić, aby nie zużywać energii akumulatora, ale jednak coś się w tle dzieje.

Po ostatnim eksperymencie z przechwytywaniem komunikacji sieciowej w celu zdiagnozowania problemu długiego startu postanowiłem jeszcze trochę pobawić się w swego rodzaju reverse-engineering. Przechwyciłem komunikację sieciową ponownie, aby z kolei sprawdzić czy aplikacja (a raczej model danych JSON) przewiduje już obecnie możliwość posortowania elementów na ekranie urządzeń i scen. Z analizy wyszło - że jednak nie. Taką możliwość daje jedynie widok "Dom" :( Struktura danych tego widoku posiada pole "order", który definiuje kolejność na ekranie niezależnie od id elementu.

Po przydługawym wstępnie pora na meritum - prześledzona komunikacja TCP jednoznacznie pokazuje, że aplikacja zużywa energię na wysyłanie co 3 sekundy 2 bajtów - 0x20 0x03. Rozumiem, że może chodzić o realizowanie mechanizmu typu ping tudzież podtrzymywanie komunikacji z EFC-01, ale pytanie brzmi: czy na prawdę musi to być wysyłane aż co 3 sekundy?.

Rozumiem, że Android może chcieć uśpić proces i to może być jakiś workaround, żeby jednak tego nie robił, ale przeanalizowałem inne aplikacje, które łączą się z urządzeniami w mojej sieci będąc w tle i przykładowo aplikacja Synology także wysyła dane, ale już co 10 sekund.
Trudno mi powiedzieć jakie przełożenie ma komunikacja TCP w aplikacji Exta Life na zużycie energii, ale na pewno daje to do myślenia. Może dałoby się zwiększyć odstęp wysyłania tych 2 bajtów do np 10 sekund? Ciekawy jestem jak wtedy wyglądałaby sprawa zużycia energii na Androidzie.
« Ostatnia zmiana: Listopad 18, 2017, 22:45:03 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: Duże zużycie energii przez aplikację w tle
« Odpowiedź #1 dnia: Listopad 22, 2017, 06:44:08 »
Witam,
Dziękuję za tak szczegółową analizę. Problem zużycia energii jest mi znany. Już kiedyś dopytywałem programistów Androida o tą kwestię i faktycznie jest to wymagane do podtrzymania komunikacji z kontrolerem. Dopytam jednak, czy istnieje możliwość zwiększenia tego czasu i w jakim zakresie da się nim manewrować. Jak coś będę wiedział  to dam znać.

*

Offline admin

  • *****
  • 1443
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Duże zużycie energii przez aplikację w tle
« Odpowiedź #2 dnia: Listopad 22, 2017, 12:14:41 »
Witam,
Dziękuję za tak szczegółową analizę. Problem zużycia energii jest mi znany. Już kiedyś dopytywałem programistów Androida o tą kwestię i faktycznie jest to wymagane do podtrzymania komunikacji z kontrolerem. Dopytam jednak, czy istnieje możliwość zwiększenia tego czasu i w jakim zakresie da się nim manewrować. Jak coś będę wiedział  to dam znać.
Jeśli to faktycznie komunikacja aplikacji wpływa najbardziej na zużycie energii, to może trzebaby w ogóle zmienić podejście. Sądzę, że gdy aplikacja jest otwarta to połączenie nie jest zamykane przez system Android. Gdy aplikacja "pójdzie" w background - w ogóle nie kontynuować komunikacji. A po powrocie do aplikacji - nawiązać połączenie ponownie. Trwa to i tak ułamek sekundy (np. gdy kliknie się ikonkę utraconego połączenia).

Myślę, że taka opcja byłaby lepsza ponieważ obecnie ten mechanizm podtrzymywania połączenia raz że niepotrzebnie zużywa baterię, a dwa - jest po prostu nieskuteczny, ponieważ u mnie po kilku minutach gdy aplikacja działa w tle - i tak po powrocie do niej pokazywana jest ikona utraty połączenia.

Tak czy owak - aż się prosi o automatyczne wznawianie połączenia gdy aplikacja wraca na pierwszy plan. Po co użytkownik ma klikać na ikonkę? To na pewno nie jest smart ;)
« Ostatnia zmiana: Listopad 22, 2017, 12:17:13 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: Duże zużycie energii przez aplikację w tle
« Odpowiedź #3 dnia: Listopad 24, 2017, 07:45:59 »
Witam,

Zostały zgłoszone dwie propozycje do realizacji od strony aplikacji:
1. wydłużenie czasu odpytywania w celu podtrzymania komunikacji z 3 s do 10 s
2. realizacja podobna jak systemowo w iOS - czyli w tle komunikacja jest "ubijana" a po powrocie do aplikacji trzeba ją wznowić klikając w ikonkę wznowienia połączenia

Obecnie czekam na realizację tych tematów przez firmę piszącą dla nas aplikacje. Jak będę miał jakieś rozwiązanie to dam znać. 

*

Offline admin

  • *****
  • 1443
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Duże zużycie energii przez aplikację w tle
« Odpowiedź #4 dnia: Listopad 24, 2017, 09:48:32 »
Zostały zgłoszone dwie propozycje do realizacji od strony aplikacji:
1. wydłużenie czasu odpytywania w celu podtrzymania komunikacji z 3 s do 10 s
2. realizacja podobna jak systemowo w iOS - czyli w tle komunikacja jest "ubijana" a po powrocie do aplikacji trzeba ją wznowić klikając w ikonkę wznowienia połączenia
Brzmi świetnie. Może też zaproponuje Pan tamtej firmie automatyczne wznawianie połączenia po powrocie do aplikacji? Jestem pewny, że programistycznie to jest drobnostka, a uczyni aplikację bardziej "smart". Przykładowe rozwiązanie: https://stackoverflow.com/questions/4414171/how-to-detect-when-an-android-app-goes-to-the-background-and-come-back-to-the-fo

Cytuj
Obecnie czekam na realizację tych tematów przez firmę piszącą dla nas aplikacje. Jak będę miał jakieś rozwiązanie to dam znać.
Świetnie. A może gdy będzie gotowe to wypuścić mały update aplikacji? Myślę, że częstsze update'y poprawią nieco wizerunek aplikacji.
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: Duże zużycie energii przez aplikację w tle
« Odpowiedź #5 dnia: Grudzień 01, 2017, 05:48:43 »
Witam. Posiadam telefon xiaomi mi6 z racji 6GB ramu mam najczęściej używane aplikacje cały czas w tle uruchomione.
Albo nie kojarzę ale w tej nowej wersji aplikacji mimo że aplikacja extalife powinna działać w tle ona chyba się ubija i po ponownym wejściu do niej i tak nie ma komunikacji "wystąpił błąd" i tak trzeba ponownie zamknąć i otworzyć aplikacje.
Jest to niesamowicie denerwujące czy jest szansa na naprawę tego?

*

Offline admin

  • *****
  • 1443
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Duże zużycie energii przez aplikację w tle
« Odpowiedź #6 dnia: Grudzień 01, 2017, 09:16:56 »
Witam. Posiadam telefon xiaomi mi6 z racji 6GB ramu mam najczęściej używane aplikacje cały czas w tle uruchomione.
Albo nie kojarzę ale w tej nowej wersji aplikacji mimo że aplikacja extalife powinna działać w tle ona chyba się ubija i po ponownym wejściu do niej i tak nie ma komunikacji "wystąpił błąd" i tak trzeba ponownie zamknąć i otworzyć aplikacje.
Sprawdź jedną rzecz: czy twój telefon pozwala na działanie tej aplikacji w tle. Z doświadczenia wiem że chińskie telefony (miałem kiedyś Xiaomi, a obecnie już drugiego Huaweia + Huawe żony) dość agresywnie zarządzają aplikacjami w tle. Domyślnie "ubijają" większość takich aplikacji, aby oszczędzić baterię. W Xiaomi oraz Huawei jest ustawienie dotyczące każdej aplikacji i ustawia się czy może działać w tle czy nie. Nowsze Huawei już aż tak bardzo agresywnie nie wyłączają aplikacje w tle, ale nadal ponadstandardowo.

Niezależnie od tego jednak jest na pewno błąd w aplikacji, że gdy Android zamknie aplikację (np. po uruchomieniu innych aplikacji) to po powrocie do aplikacji Exta Life zamiast ekranu widocznego po zalogowaniu i ikonki zerwanego połączenia otwiera się ekran startowy z polami do wpisania danych do logowania. To jest zdecydowanie błąd aplikacji, ponieważ jeśli ktoś ma zapamiętane dane logowania to nie powinien widzieć tego ekranu, a aplikacja powinna sama podjąć próbę ponownego zalogowania się do EFC-01. Sytuacja taka ma także miejsce przy wykonaniu resetu EFC-01 z poziomu aplikacji lub zmiany ustawienia synchronizacji czasu z internetem. Tyle że w tych dwóch przypadkach to jeszcze może mieć sens, bo kontroler potrzebuje kilku sekund, aby się uruchomić. Sensowne jest więc, że nie próbuje sama się logować, ale dane do logowania powinny być jednak już wyświetlone i jedyne co wtedy użytkownik powinien zrobić to przycisnąć przycisk "Zaloguj". Zgłoszę to w nowym wątku.
« Ostatnia zmiana: Grudzień 01, 2017, 09:38:46 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

*

Offline admin

  • *****
  • 1443
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Duże zużycie energii przez aplikację w tle
« Odpowiedź #7 dnia: Grudzień 04, 2017, 09:28:29 »
do @michal1981 - jeszcze odnośnie zużycia energii przez aplikację. Myślę, że warto namówić kolegów z Ready4S wykonujących aplikację ExtaLife, aby zaczęli używać narzędzi do profilowania kodu. Na przykład natywnych narzędzi od Google wbudowanych w Android Studio https://developer.android.com/studio/profile/index.html. To powinno im jasno pokazać, gdzie jest problem i z czego wynika duże zużycie energii.

Jeśli na serio, profesjonalnie zajmują się produkcją aplikacji i biorą za to pieniądze to profilowanie kodu nie powinno być im obce, a samo jego wdrażanie w proces produkcji oprogramowania jest nie mniej ważne niż testy funkcjonalne, szczególnie w temacie aplikacji mobilnych.
« Ostatnia zmiana: Grudzień 11, 2017, 11:46:13 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

*

Offline admin

  • *****
  • 1443
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Duże zużycie energii przez aplikację w tle
« Odpowiedź #8 dnia: Styczeń 26, 2018, 15:04:48 »
Update: problem zużycia energii przez aplikację być może będzie niedługo rozwiązany. 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 planowana jest na "początek lutego". Miejmy nadzieję, że faktycznie odczujemy poprawę i będzie można zostawić aplikację uruchomioną w tle, bez obawy, że rozładuje nam telefon.
« Ostatnia zmiana: Styczeń 26, 2018, 15:06: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

*

Offline admin

  • *****
  • 1443
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Duże zużycie energii przez aplikację w tle
« Odpowiedź #9 dnia: Kwiecień 14, 2018, 09:53:06 »
Według moich obserwacji nowa wersja aplikacji - 1.5 wnosi zauważalną poprawę. Kluczową kwestią jest wstrzymanie połączenia sieciowego z kontrolerem gdy aplikacja pracuje w tle.
Jednakże mimo wprowadzenia tej zmiany - na moim telefonie i tak raportowane jest duże zużycie przez aplikację. Wystarczy się pobawić kilka - np z 10-15 minut i mamy od razu zużycie większe niż Facebook, Chrome itp. A co najbardziej niepokojące - mój telefon nadal raportuje podwyższone zużycie energii w tle (screeny), co już nie powinno mieć miejsca - a jednak.... :(

Nadal potrzebna jest praca nad tym aspektem. Poziom zużycia baterii jest wg mnie nadal na nieakceptowalnym poziomie jak na aplikację mobilną. Nadal lepiej zamykać aplikację gdy się z niej nie korzysta. O tyle dobrze, że teraz aplikacja startuje dużo szybciej niż w wersji 1.4.

Mam ochotę sprawdzić co dokładnie drenuje baterię poprzez użycie narzędzi do profilowania kodu - w tym celu chciałbym spróbować ponownej kompilacji zdekompilowanego kodu źródłowego i dlatego poszukuję do pomocy androidowca na forum.

PS. W załączniku screeny raportu wykorzystania baterii ExtaLife - ok 80 mAh i aż 15 minut procesora w tle (z niezrozumiałych dla mnie powodów) oraz dla porównania Facebook - niewiele krótsze używanie a tylko 2 minuty procesora w tle i aż o 30 mAh mniejsze zużycie. Facebook - krój drenażu baterii zużywa mniej niż aplikacja ExtaLife.
« Ostatnia zmiana: Kwiecień 14, 2018, 10:20:21 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: Duże zużycie energii przez aplikację w tle
« Odpowiedź #10 dnia: Kwiecień 17, 2018, 22:27:15 »
U mnie podobno.
Zużycie energii na katastrofalnym poziomie

Odp: Duże zużycie energii przez aplikację w tle
« Odpowiedź #11 dnia: Kwiecień 21, 2018, 13:18:34 »
Również potwierdzam nadal duże użycie baterii przez aplikację pozostawioną w tle, mimo iż komunikacja sieciowa nie jest podtrzymywana. O ile pod Android 7 można skonfigurować, że aplikacja w tle jest automatycznie zatrzymywana i wtedy problemu nie ma, to pod Androidem 6 takiej opcji chyba nie ma i trzeba ją zatrzymać ręcznie, co jest bardzo niewygodne.

*

Offline admin

  • *****
  • 1443
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Duże zużycie energii przez aplikację w tle
« Odpowiedź #12 dnia: Październik 16, 2018, 11:42:48 »
Odświeżam temat. Dzisiaj postanowiłem zmienić ustawienia w telefonie aby aplikacja mogła działać w tle i aby nie była automatycznie wyłączana. Niestety po wyłączeniu mechanizmu zapobiegającego nadmiernemu zużyciu baterii szybko okazało się że aplikacja pobiera bardzo dużo energii w tle. Przez godzinę czasu u mnie wyszło ponad 100 mAh czyli bardzo dużo a użyłem jej tylko przez kilka sekund w ciągu tej godziny.
Szczegóły na załączonym obrazku.

Nie wiem czy to któraś z ostatnich aktualizacji aplikacji spowodowała znowu nadmierne zużycie czy jest tak od dłuższego czasu ponieważ przez co najmniej 2 miesiące miałem włączone automatyczne zamykanie aplikacji w tle właśnie z powodu nadmiernego zużycia energii.

Myślę że trzeba by się zająć tym tematem pilnie, ponieważ używanie aplikacji dalej sprowadza się do każdorazowego logowania sie przy jej uruchomieniu, ponieważ nie chcąc bezsensownie tracić energii w telefonie lepiej jest ją zamykać za każdym razem.
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: Duże zużycie energii przez aplikację w tle
« Odpowiedź #13 dnia: Październik 20, 2018, 22:27:57 »
Też to ostatnio zauważyłem - mam wrażenie, że jest tak od ok. 1-2 tygodni, czyli jakby od aktualizacji 2.01/2.02, a może nawet od wersji 2.00 (kompatybilność z ExtaFree). U mnie szczegóły zużycia baterii przez aplikację mówią o zużyciu (!) 558mAh - szczegóły w załączniku.

*

Offline admin

  • *****
  • 1443
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Duże zużycie energii przez aplikację w tle
« Odpowiedź #14 dnia: Październik 22, 2018, 10:41:39 »
558 mAh - to ogromne zużycie! Takie zużycie miałbym może siedząc cały dzień na facebooku, a przecież tam są tony komunikacji przez sieć i wyświetlania zawartości. A tu prosta aplikacja i takie zużycie...wracamy chyba do punktu wyjścia.

Z mojej analizy wynika, że to musi być nowy błąd. O ile wcześniej aplikacja drenowała baterię w tle przez podtrzymywanie połączenia ("pingi" TCP co 3 sekundy) - tak teraz wygląda, że nie wysyła nic przez sieć, a mimo to usługa w tle należąca do aplikacji konsekwentnie "zjada" baterię. W tym czasie aplikacja nie jest na pierwszym planie, więc to ewidentnie jakiś błąd. Jest pewnie jakiś wątek (podobny pewnie do tego, który wykonuje poszukiwanie kontrolera przez multicast TCP) stworzony przez usługę aplikacji, który wykonuje cały czas jakieś działanie. Wydaje mi się, że dodatkowo usługa nie jest zatrzymywana przez aplikację przy przejściu w tło i dodatkowo ta usługa w tle wykonuje jakieś działania. Skoro nie związane z siecią to nawet trudno mi przypuszczać co jest wykonywane.
Oj, aplikacja widać nie jest zbyt uważnie testowana...kwestia zużycia baterii aplikacji na urządzeniach mobilnych to jeden z najważniejszych aspektów testowania aplikacji mobilnych!

@ZAMELu - przekażcie proszę do Ready4S problem do rozpatrzenia bo problem ewidentnie występuje. Wystarczy zostawić aplikację w tle i po kilkunastu minutach pojawia się ostrzeżenie Androida o aplikacji ExtaLife pobierającej energię w tle. W widokach szczegółu widać, że ewidentnie zużycie jest bardzo duże.
« Ostatnia zmiana: Październik 22, 2018, 11:13:10 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