2012-10-17 23 views
5

Zauważyłem, że Service.START_STICKY nie działa, a kiedy się bliżej przyjrzałem, zobaczyłem, że onCreate() działa, ale onStartCommand nie jest wywoływany.Usługa Android onStartCommand nigdy nie była nazywana

Jakieś pomysły, dlaczego?

@Override 
public void onCreate() { 

    mGlobalData = GlobalData.getInstance(); 
    mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

    if (mTimer == null) 
     mTimer = new Timer(); 

    Log.e(TAG, "onCreate()"); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    int t = START_STICKY; 
    Log.e(TAG, "call me redundant BABY! onStartCommand service"); 

    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return t; 
} 

Odpowiedz

1

Spróbuj wstawić linię android.os.Debug.waitForDebugger(); pod koniec onCreate(). Debugger nie osiągnął dla mnie pułapek onStartCommand(), dopóki tego nie zrobiłem.

+1

Pracowałem dla mnie. Ale kiedy usunąłem go z metody onCreate, aby potwierdzić, że to był problem, problem zniknął. – Zeezer

8

Jeśli masz taką samą sytuację miałem, mój Service uruchamia się i działa dobrze (onCreate() i onServiceConnected() są zarówno wywoływane), ale onStartCommand(Intent,int) nigdy nie został powołany. Znalazłem, ponieważ system zaczął mój Service zamiast mnie jawnie zaczynając Service w kodzie. Według docs:

[onStartCommand(Intent,int) jest] nazywany przez system za każdym razem, gdy klient wyraźnie uruchamia usługę dzwoniąc startService(Intent)

Więc musiałem zadzwonić startService(new Intent(context, MyService.class)) jawnie w kodzie, aby uzyskać onStartCommand(Intent,int) na spuście . Pamiętaj, że wykonanie tej czynności nie uruchomi ponownie usługi utworzonej przez system i nie utworzy nowej instancji tej usługi.

Powiązane problemy