2013-05-02 3 views
0

Je démarre mon service dans onCreate() (si onCreate est appelé la première fois) et j'appelle bindService dans onStart(). Le service fonctionne probablement, mais après avoir appelé bindService mon instance locale du service est toujours nulle. En outre, semble être que getService() n'est pas appelé. Voici un code:Problèmes liés aux liaisons Android: service démarré

@Override 
protected void onCreate(Bundle savedInstanceState) { 
... 
if(savedInstanceState == null){ 
    final Intent i = new Intent(this, HostService.class); 
    startService(i); 
} 

} 

protected void onStart(){ 
    super.onStart(); 
    bindService(new Intent(this, StartGameActivity.class), connection, Context.BIND_AUTO_CREATE); 
} 

private ServiceConnection connection = new ServiceConnection(){ 

    @Override 
    public void onServiceConnected(ComponentName arg0, IBinder arg1) { 
     HostBinder binder = (HostBinder) arg1; 
     hostService = binder.getService(); 
     isBound = true; 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName arg0) { 
     isBound = false; 
    } 

}; 

et HostService:

... 
private HostBinder binder = new HostBinder(); 
... 
public class HostBinder extends Binder{ 
    HostService getService(){ 
     Log.d(TAG, "getService"); 
     return HostService.this; 
    } 
} 

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

Pourquoi est hostService encore nulle, après onStart() est appelée et pourquoi est-getService est pas appelé ("getService" n'est pas imprimer dans LogCat)?

thx & concernant

Répondre

0

Vous n'avez pas besoin d'appeler startService(); il sera démarré par bindService().

Dans votre méthode onStart(), vous créez une intention de lancer StartGameActivity.class. Était-ce ce que vous vouliez, ou avez-vous l'intention de lancer HostService.class?

Si aucun de ces problèmes n'est votre problème, nous devons continuer. Pouvez-vous mettre une instruction de journalisation à l'intérieur de vos méthodes onServiceConnected() et onBind() afin de vous assurer qu'ils sont appelés?

Des messages de logcat qui vous semblent intéressants? Parlez-vous à votre service via le classeur ou via la messagerie?

+0

merde ahhhhw. Oui, je voulais dire HostService.class. M'a mis dehors pendant quelques heures: d thx beaucoup :) – user2224350

+0

Je ne suis pas tout à fait sûr que je comprends votre question, mais si je le fais, le problème est que cela prend du temps pour le service de répondre à la demande de liaison et l'Android Le système ne veut pas que votre onCreate() reste en attente. La requête est donc gérée de manière asynchrone et votre onServiceConnected() est appelé plus tard. –

+0

@ user2224350 - Veuillez accepter la réponse pour que cette question soit marquée comme réponse. –

Questions connexes