2017-05-23 3 views
0

J'ai eu un problème avec mon service lié existant qui perd ses propriétés de liant (le classeur est éliminé pour une raison quelconque). Je suis donc retourné un pas et réapprendre le Bound Servcie. J'ai téléchargé l'application BoundServiceDemo de Xamarin à partir de la page suivante: https://developer.xamarin.com/guides/android/application_fundamentals/services/part_2_-_bound_services/java.lang.IllegalArgumentException: Service non enregistré - crash Xamarin BoundServiceDemo

Le projet a été créé et exécuté. Mais j'ai remarqué que si je fais une séquence de Unbind from service et Bind to service (via des clics de bouton dans le projet), le troisième stop va planter de manière CONSTANTE. En appuyant sur Get timestamp from service après la liaison au service n'empêche pas l'incident se produire. La trace de la pile est la suivante:

05-23 10: 33: 21,334 11.788 11.788 D AndroidRuntime: Arrêt VM

5 au 23 octobre: ​​33: 21,344 11788 11788 E AndroidRuntime: EXCEPTION FATAL: main

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: processus: com.xamarin.xample.boundservicedemo, PID: 11788

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: java .lang.IllegalArgumentException: Service non enregistré: [email protected]7c0e

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: à android.app.LoadedApk.forgetServiceDispatcher (LoadedApk.java:1156)

05-23 10:33: 21,344 11788 11788 E AndroidRuntime: à android.app.ContextImpl.unbindService (ContextImpl.java:1452)

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: à android.content.ContextWrapper.unbindService (ContextWrapper .java: 644)

5 au 23 octobre: ​​33: 21,344 11788 11788 E AndroidRuntime: à mono.android.view.View_OnClickListenerImplementor.n_onClick (native Méthode)

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: à mono.android.view.View_OnClickListenerImplementor.onClick (View_OnClickListenerImplementor.java:30)

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: à android.view.View.performClick (View.java:5697)

05-23 10: 33: 21.344 11788 11788 E AndroidRuntime: au android.widget .TextView.performClick (TextView.java:10814)

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: à android.view.View $ PerformClick.run (View.java:22526)

5 au 23 octobre: ​​33: 21,344 11788 11788 E AndroidRuntime: à android.os.Handler.handleCallback (Handler.java:739)

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: à androïde. os.Handler.dispatchMessage (Handler.java:95)

05-23 10: 33: 21.344 11788 11788 E AndroidRuntime: à android.os.Looper.loop (Looper.java: 158)

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: à android.app.ActivityThread.main (ActivityThread.java:7229)

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: à java.lang.reflect.Method.invoke (native Method)

05-23 10: 33: 21,344 11788 11788 E AndroidRuntime: à com.android.internal.os.ZygoteInit $ MethodAndArgsCaller. run (ZygoteInit.java:1230)

05-23 10: 33: 21.344 11788 11788 E AndroidRuntime: au com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)

05-23 10: 33: 21,344 4.699 4.724 W VirtualScreenManagerService: moveTaskBackToDisplayIfNeeded(): activité supérieure ou de l'application est nulle

5 à 23 octobre: ​​33: 21,354 4699 4724 D InputDispatcher: application Focused ensemble à: xxxx

J'utilise VS2015 avec la version 4.5.0.443 Xamarin. J'espère que ce n'est pas un bug avec Xamarin parce que mon application fait plusieurs services de liaison/désengagement au cours de sa vie. Quelqu'un peut-il s'il vous plaît jeter un peu de lumière? Je vous remercie.

Répondre

0

J'ai contacté l'auteur de l'exemple de code, Tom Opgenorth, et il pense que c'est le paramètre dynamique du gestionnaire d'événements pour l'événement Click qui provoque le blocage. Le gestionnaire d'événements a maintenant été modifié pour être enregistré une fois lorsque l'activité commence. Il a résolu le problème. En suivant l'information de Tom, j'ai trouvé que le gestionnaire d'événement pour RestartServiceButton click était enregistré chaque fois que le bouton de service d'arrêt cliquait mais ne s'annulait pas jusqu'à l'arrêt de l'application. Cela signifie que l'événement de clic RestartServiceButton se déclencherait plusieurs fois pour chaque clic suivant. Ainsi, le problème peut également être résolu par lui-même la désinscription de l'événement quand il se déclenche

void RestartServiceButton_Click(object sender, System.EventArgs e) 
{ 
    ... 
    restartServiceButton.Click -= RestartServiceButton_Click; 
} 

Tom devrait être de télécharger la version mise à jour bientôt