Jeśli dobrze rozumiem, Android Service
s domyślnie działa w głównym wątku interfejsu użytkownika. Tak więc, aby zadziałała jakakolwiek operacja poza głównym wątkiem, znalazłem ludzi sugerujących, że jeden rozpoczyna osobny wątek w Service
.
Moje pytanie brzmi jednak, czy: Service
Metoda jest wywoływana w innym wątku, tj. AsyncTask
lub new Thread(...).start();
, robi Service
Metoda działa w wątku wywołującym? Czy działa w wątku głównym, który podobno Service
biegnie?
Innymi słowy,
new Thread(new Runnable() {
@Overrde
public void run() {
myAndroidService.doSomething();
}
}).start();
byłoby MyAndroidService#doSomething()
zostać wezwanym w tym nowym Thread
?
Odpowiedzi:
6 dla odpowiedzi № 1Metoda jest zawsze uruchamiana w wątku, który ją wywołuje.
Metoda tak naprawdę nie należy do żadnego wątku, więc tak, mimo że metoda jest zdefiniowana w Twojej usłudze, zostanie wykonana w AsyncTask
wątek, a nie główny wątek, w którym działa usługa.
1 dla odpowiedzi nr 2
Tak, jak wspomniano powyżej Martin.
Ponadto możesz sprawdzić informacje o wątku metody przez:
private void doSomething(){
Log.i(TAG, "I"m doing something in thread " + Thread.currentThread().toString());
}