2015-08-07 9 views
9

Czy można wstrzymać bieżącą usługę w tle i uruchamiać ją ponownie od momentu zatrzymania jej wykonywania?Wstrzymaj proces w tle w robospice

Jeśli nie, czy przynajmniej jest możliwe wysłanie sygnału, aby zatrzymać wykonanie SpiceService przed zakończeniem jego realizacji?

+1

Myślę, że musisz zaktualizować swoje pytanie z RoboSpice w tytule. To, co właśnie opisałeś, nie ma nic wspólnego z Retrofitem - nie obsługuje własnych usług. –

+1

Czy mówisz, że chcesz wstrzymać połączenie na serwerze? i zatrzymać przesyłanie strumieniowe danych? kontynuować transmisję? – hasan83

+1

@ hasan83 Jeśli to możliwe, tak. Jeśli nie, to przynajmniej w celu zatrzymania wykonywania procesu bg przed jego zakończeniem (w moim przypadku jest to ciężki proces, że jeśli użytkownik modyfikuje zestaw parametrów w działaniu, proces bg również musi zostać zmodyfikowany i ten proces jest zbyt ciężki, aby czekać na jego zakończenie i uruchomić go ponownie z nowymi parametrami). – qwerty

Odpowiedz

4

Nie jestem ekspertem od Robospice/Retrofit. Ale jest to ogólne pytanie dotyczące połączenia HTTP.

Aby to osiągnąć, musisz napisać kod niskiego poziomu, aby połączyć się z serwerem. aby otworzyć strumień do usługi. w ten sposób możesz sprawdzić, czy strumień jest nadal otwarty. jeśli tak, dodaj nowe dane do tablicy, z której strumień już pobiera dane, aby wysłać je do usługi.

Ponieważ używasz tej biblioteki. To nie dotyczy. Twoim jedynym rozwiązaniem jest anulowanie/zatrzymanie połączenia i ustanowienie nowego.

To powinno być łatwe:

if(spiceManager.isStarted()) 
    spiceManager.cancel(String.class, MY_REQUEST_CACHE_KEY); 

A następnie rozpocząć nowy.

Uwaga: Istnieje możliwość, że na sprawdzenie, czy spiceManager zaczęły się prawdziwe. i przed anulowaniem połączenie spiceManager zostaje zakończone. W takim przypadku należy wziąć pod uwagę, aby nie przesyłać ponownie przesłanych informacji. to byłoby marnotrawstwo. To zależy od implementacji. możesz nie musieć wykonywać dodatkowej pracy dla tego .

1

Można spróbować użycia „wait()”, który jest metoda obiektu za .To może wstrzymać bieżącego wątku, dopóki nie używane „notify()” lub „notifyAll()” z tego samego obiektu w innym wątku.

Powiązane problemy