Skocz do zawartości
kgit777

Pytanie dla doświadczonych koderów

    Rekomendowane odpowiedzi

    witam wszystkich,

    mam problem/pytanie ... Mam sobie aplikację (wiele activity..) w jednym z activity, po kliknięcie w button w przypadku braku połączenia internetowego, metoda która ma zostać wykonana jest opakowana w obiekt interfejsu Callable:

    Callable<Void> callable = new Callable<Void>() {
        public Void call() {
            isHierarchyValid(itemList);
            return null;
        }
    };
    NoNetworkTool.get().addInvoke(callable);

     

    Nestępnie wychodzę z tego activity do innego/innych.

    Klasa NoNetworkTool trzyma w liście obiekty klasy Callable, klasa ta jest singletonem. W przypadku odzyskania internetu , dla wszystkich obiektów z listy jest wołana metoda call() .

    Generalnie rozwiązanie to działa. Jednakże obawiam się problemów.. wiem że android potrafi zniszczyć activity (nie aktywne) w razie potrzeby.. może mnie ktoś oświecić jak bardzo nie dobre jest to rozwiązanie...

    lub (w co wątpię) że powinno działać...

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Coderoid

    Singleton i trzymanie danych do synchronizacji w aktywnościach jest bardzo słabym pomysłem. Powinieneś pomyśleć o broadcast receiver który chwyci moment ponownego połączenia z internetem, sprawdzi czy są dane do synchronizacji, uruchomi serwis i zacznie synchronizować. Jeśli chcesz się bawić samodzielnie, to możesz pisać bazę danych z której będziesz brać dane do serialozowanych klas i pchać na serwer kiedy jest połączenie. Serwisu system nie ubije, baza będzie cały czas. 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Dzięki za odpowiedź.

    Ale już wykorzystuje Broadcast Receivera do tego celu.. na innym forum dobrze mi doradzili bym w metodzie onDestroy Activity czyścił referencję i po sprawie..

     

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    giaur500

    Jeśli chodzi ci tylko o synchronizację danych z serwerem, to wynajdujesz koło na nowo. Do tego jest sync adapter. Dane trzymasz w ContentProvider - twoje activity mogą sobie keszować dane, rejestrujesz tylko obserwatora i gdy dane ulegną zmianie, sync adapter automatycznie wyzwala synchronizację - gdy nie ma netu, sam kolejkuje zadanie i czeka aż pojawi się połączenie żeby wykonać synchronizację

     

    Lub na odwrót, to serwer wysyła push message do klientów przez FCM i wymusza na nich synchronizację wtedy kiedy chce - jeśli urządzenie jest akurat offline, dostanie żądanie synchronizacji od razu gdy połączy się z siecią.

     

    Twój pierwszy sposób rzeczywiście jest złym pomysłem 

    Edytowane przez giaur500
    • Lubię to! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x