2012-10-17 18 views
5

Ho notato che Service.START_STICKY non funziona e quando visualizzo da vicino, ho visto che onCreate() è in esecuzione ma onStartCommand non viene chiamato.Servizio Android onStartCommand mai chiamato

Qualche idea, perché?

@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; 
} 

risposta

1

tenta di inserire la linea android.os.Debug.waitForDebugger(); alla fine del onCreate(). Il debugger non ha raggiunto i punti di interruzione di onStartCommand() finché non l'ho fatto.

+1

Ha funzionato per me. Ma quando l'ho rimosso dal metodo onCreate per confermare che questo era effettivamente il problema, il problema era scomparso. – Zeezer

8

Se avete la stessa situazione che ho avuto, il mio Service avvia e corre bene (onCreate() e onServiceConnected() sono entrambi invocato), ma onStartCommand(Intent,int) non è mai stato chiamato. Ho scoperto che il sistema ha avviato il mio Service invece di avviare esplicitamente il codice Service. Secondo il docs:

[onStartCommand(Intent,int) è] chiamato dal sistema ogni volta che un client si avvia in modo esplicito il servizio chiamando startService(Intent)

Così ho dovuto chiamare startService(new Intent(context, MyService.class)) esplicitamente nel codice per ottenere onStartCommand(Intent,int) a grilletto . Si noti che ciò non riavvierà il servizio creato dal sistema e non creerà una nuova istanza di quel servizio.

Problemi correlati