2010-06-11 11 views
13

Sto avviando un servizio nella mia applicazione usando startService.Come ottenere l'istanza del servizio locale Android

Non voglio utilizzare bindService perché desidero gestire personalmente la durata del servizio.

Come posso ottenere un'istanza per il servizio avviato se non utilizzo bindService? Voglio essere in grado di ottenere un gestore che ho creato nella classe di servizio per pubblicare messaggi dall'attività.

Grazie.

/Henrik

risposta

13

Non voglio usare bindService come ho voglio gestire il tempo di durata me stesso.

Ciò non significa che si deve evitare bindService(). Utilizzare sia startService() e bindService(), se necessario.

Come posso ottenere un'istanza al servizio avviata se io non uso bindService?

Utilizzare bindService() con startService() oppure utilizzare un singleton.

+0

Con "uso di un singleton" intendi che dovrei dichiarare i miei metodi statici nella classe di servizio? – Henrik

+0

Ha funzionato come un fascino con bindService e startService. Grazie! – Henrik

+2

@Henrik: FWIW, per singleton, intendevo che avresti un riferimento statico al tuo servizio, messo lì dal servizio 'onCreate()', rimosso nel 'onDestroy()' del servizio. Ciò comporta il rischio di perdite di memoria, quindi è consigliabile legare, laddove possibile. – CommonsWare

4

Ecco un altro approccio:

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 

public class MyService extends Service { 
    private Binder binder; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     binder = new Binder(); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return binder; 
    } 

    public class Binder extends android.os.Binder { 
     public MyService getService() { 
      return MyService.this; 
     } 
    } 
} 

onServiceConnected(...) può lanciare il suo argomento MyService.Binder e chiamare getService() su di esso. Ciò evita la potenziale perdita di memoria dall'avere un riferimento statico al servizio. Certo, devi ancora assicurarti che la tua attività non sia appesa a un riferimento.

Problemi correlati