2009-10-17 5 views
4

J'ai essayé de lier un service qui a été démarré au démarrage à partir d'une activité. Le code pour démarrer au démarrage a été principalement pris du instant messenger.ServiceConnection :: onServiceConnected non appelé même si Context :: bindService renvoie true?

Telle est la définition AndroidManifest.xml pour les 3 composantes principales:

<!-- Receiver --> 
    <receiver android:name=".receiver.LifestylePPAutoStarter" 
     android:process="android.process.lifestylepp"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 

    <!-- Service --> 
    <service android:name=".service.LifestylePPService" 
     android:process="android.process.lifestylepp" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="edu.gatech.lifestylepp.ILifestylePPService" /> 
      <action android:name="edu.gatech.lifestylepp.SERVICE" /> 
     </intent-filter> 
    </service> 

    <!-- Activity --> 
    <activity android:name=".app.LifestylePPActivity" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Le récepteur démarre le service au démarrage sans aucun problème. Toutefois, lorsque j'essaie de lier le service à mon activité, Context :: bindService renvoie true, mais ServiceConnection :: onServiceConnected n'est jamais appelé. En outre, lorsque je démarre le service à partir de l'activité, cela fonctionne comme prévu (ServiceConnection :: onServiceConnected est appelé).

Répondre

2

Aussi, quand je commence le service de l'activité fonctionne comme prévu (ServiceConnection :: onServiceConnected est appelé).

startService() n'implique pas d'objet ServiceConnection. Débarrassez-vous des lignes android:process="android.process.lifestylepp" de votre manifeste. Cela peut être la source de votre difficulté, et plus important encore, il est très peu probable que vous ayez vraiment besoin de deux processus et de tous les frais généraux qui en découlent.

+0

Je sais que startService() n'implique pas de ServiceConnection. Ce que j'ai voulu dire c'est: Quand je démarre le service de l'activité, je peux le lier en utilisant bindService (intention, connection, 0) sans aucun problème. Le problème se produit uniquement lorsque le service est démarré à partir du récepteur. Merci pour votre suggestion, cependant! Malheureusement, j'ai déjà essayé d'exécuter l'activité et le service sur le même processus et cela n'a rien changé. – kloffy

+1

Ajoutez l'indicateur BIND_AUTO_CREATE dans votre appel bindService(). – CommonsWare

+0

Cela ne provoquerait-il pas le démarrage d'un nouveau service? Le service est déjà en cours d'exécution, il a été créé au démarrage par le récepteur. Je veux juste le lier de l'activité. – kloffy

Questions connexes