Wątek przeniesiony 2018-04-03 18:03 z Java przez Ktos.

Android service - reakcja na "ubicie" aplikacji

0

Witam
Nie bardzo widziałem w jakim dziale umieścić ten temat bo sprawa nie dotyczy samego programowania a a raczej gotowego rozwiązania.
Piszę na forum bo już parę dni poświęciłem na analizę i poszukiwanie rozwiązania, ale do rzeczy.

Stworzyłem aplikację w cordova android, aplikacja działa tak jak powinna czyli pobiera dane z serwera i przedstawia je użytkownikowi ponadto kiedy działa w tle wyświetla powiadomienia jeżeli dane uległy zmianie (wow).
Problemem jest to że można ją bez problemu zamknąć w menadżerze.
Chciałbym to rozwiązać w taki sposób żeby dodać proces w tle który będzie monitorować co jakiś czas czy aplikacja jest ubita czy nie i ewentualnie ją reanimować.
Znalazłem w sieci parę kodów usług ale na przejrzeniu kodu się skończyło bo równie dobrze mógłbym czytać po chińsku i tyle samo bym zrozumiał jak to zrobić.
Podszedłem do tematu od drugiej strony czyli wysyłania powiadomień FCM co udało mi się zaimplementować ale to jednak nie pozwala mi ingerować w częstotliwość dostarczania powiadomień a z założenia projektu ma nie być komunikacji zwrotnej z serwerem (tylko zapytania o dane).

Nie lubię prosić o gotowce ale tym razem nie mam wyjścia i o ile by ktoś był chętny mi pomóc byłbym dozgonnie wdzięczny.

1

Chciałbym to rozwiązać w taki sposób żeby dodać proces w tle który będzie monitorować co jakiś czas czy aplikacja jest ubita czy nie i ewentualnie ją reanimować.

A jak ktoś ubije ten monitor? "Who will watch the watchers?" ;)

0

Przyglądam się temu https://github.com/Red-Folder/bgs-core
Ale niestety na tym się to kończy nie mam jak uruchomić debugera dla javy żeby zobaczyć co tam się dzieje w środku , mój sprzęt nie radzi sobie z niczym poza przeglądarką więc kombinuje w ciemno ale bez efektu.

0

Nie wiem, co jest do końca rozumiane w tej bibliotece przez BG service (średnio mogę zobaczyć przez telefon) , ale jeżeli taki typowy Androidowy, to też nie przejdzie, bo system dosyć szybko go ubije jeżeli aplikacja nie będzie widoczna. Musiałbyś użyć foreground service, ale tu ten sam problem, bo ktoś może taki serwis łatwo ubić z powiadomień.

Musiałbyś pewnie zrobić jakiś JobScheduler, który odpala aktualizację danych okresowo i wysyła notyfikację, kiedy skończy się aktualizacja. Ale nie znam się aż tak na Cordovie, żeby doradzić co i jak dokładnie, ani czy w ogóle się da z jej poziomu.

0

No nic zrobię powiadomienia FCM wysyłane przez serwer i zapisy to topiców a między czasie będę myślał.Może kiedyś wpadnę na jakiś wątek w necie.

A co do tego rozszerzenia Sample w podanym prze zemnie linku to wcale tak łato nie jest ubić tego procesu bo w ogóle nie jest on widoczny trzeba się nagrzewać żeby to zamknąć no chyba że się uruchomi ręcznie i samemu wyłączy bo inaczej to cały dzień potrafi śmigać, poza tym wiem ze jest metoda ondestroy() i wiem ze można uruchomić w ten sposób proces od nowa więc to by raczej działało ale jak się NIE MA na czym pracować to sobie mogę...

0

Jak ubijesz aplikację korzystającą z FCM, to też przestaną przychodzić powiadomienia (ubijesz, to znaczy nie usuniesz z listy ostatnich, a zrobisz "Wymuś zatrzymanie" w ustawieniach). Sprawdzone, nie wiem czy sie podniesie potem sama po jakimś czasie, czy nie. Jak nie ubijasz, to nawet po restarcie telefonu działa dobrze.

0

Też nie wiem czy wiesz ale Android 8.0 wprowadzil jeszcze wieksze restrykcje co do servisów (glwonie tych "background"):
https://developer.android.com/about/versions/oreo/background.html

Nie wiem jak ta cała Cordova to ogarnia bo trzymam się z daleka od takich rzeczy ;)

Tak jak ktoś już wspomniał najlepiej to ogarnąc uzywając JobSchedulera (minApi 21) albo FirebaseJobDispatchera (minApi < 21) https://github.com/firebase/firebase-jobdispatcher-android#user-content-firebase-jobdispatcher- i periodycznie odpalać "synca" ktory bedzie sciagal dane i ewentualnie wyswietlal notyfikacje.

0

Zawsze jak ubijesz aplikację siłowo to przestanie działać. Z tym że może sie to potem podnosi automatycznie. JobSheduler jest niby dobry, ale to nie do końca to, co akurat ja potrzebuję i jestem trochę w kropce.

0

Mi nie chodziło o ubijanie siłowe bo na to nie ma rady, nikt z "normalnych " użytkowników przecież nie zamyka tak aplikacji, chodziło mi o zwykłe zamykanie aplikacji z listy uruchomionych (menadżer zadań) ot i tyle bo normalnie aplikacja cordovy zwyczajnie zdechnie.
Ogólnie nie bawię się w androida bo i javy nie znam ale jakoś tak wyszło ze potrzeba mi była aplikacja.
Do banalnych zastosowań cordova nie jest zła, tylko co to za aplikacja co nie ma powiadomień :) i można ją wykończyć jednym kliknięciem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1