Stworzyłem sobie service, odpalane raz na jakiś czas przez AlarmManager. Service implementuje pewnego listenera. Po krótce, metoda wyzwalana przez listener wygląda tak:
public void onStateChanged()
{
Log.i("service", "working!");
//tutaj robie cokolwiek (nie ma to znaczenia)
//po odebraniu sygnalu (i zrobieniu roboty) chce, by service sie zatrzymalo
stopSelf();
}
I teraz smieszna sprawa - stopSelf() zabija mi service, zanim wykona się kod wcześniej. Jeżeli podczas debugowania ustawie sobie breaka gdzies w środku tej metody, wszystko działa jak trzeba - kod jest wykonywany (loguje się informacja do loga), a potem service jest zatrzymywane. Bez breaka - kod NIE JEST WYKONYWANY - w logu czysto. Pytanie - dlaczego? Jak to obejść? Jeżeli usunę stopSelf() wszystko działa, ale wolę wyłączyć service, jak nie jest już mi potrzebne. Najchętniej sprawę rozwiązałbym bez tego listenera, ale niestety inaczej nie obsłużę eventów z sensora położenia...
Pomocy! 😉 Jakim cudem kod zatrzymania może się wykonać wcześniej, skoro wszystko jest w obrębie jednego wątku, jednej klasy, jednej metody?