Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Java & Mobiles > Android
Android Forum d'entraide sur Android, la plateforme mobile de Google pour téléphones portables et Smartphones. Avant de poster -> FAQ Android
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/01/2013, 23h08   #1
Gébix
Membre du Club
 
Inscription : décembre 2005
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 156
Points : 51
Points : 51
Par défaut Comment 'binder' un service de manière synchrone ?

Bonjour,

J'ai le code suivant mais il bloque et ne passe même pas par la méthode onServiceConnected().
Code :
1
2
3
4
5
6
7
8
9
10
11
12
        @Override
        public void onServiceConnected(ComponentName className, IBinder service) {
            sgsBinder = (SGS.SGSBinder) service;
 
            Log.e("binding", "binding ok");
 
            synchronized (bindingLock) {
                bindingLock.notify();
            }
 
            isSGSBound = true;
        }
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    @Override
    public void onStart() {
        super.onStart();
 
        bindService(sgsIntent, sgsConnection, Context.BIND_AUTO_CREATE);
 
        synchronized (bindingLock) {
            Log.e("binding", "starting to wait");
 
            try {
                bindingLock.wait();
            } catch (InterruptedException e) {
                System.out.println("InterruptedException caught");
            }
        }
    }
Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

Merci d'avance pour votre aide
Gébix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 03h01   #2
nicroman
Modérateur
 
Homme Nicolas Romantzoff
Ingénieur systèmes et réseaux
Inscription : février 2007
Messages : 2 861
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Romantzoff
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2007
Messages : 2 861
Points : 4 913
Points : 4 913
Envoyer un message via Skype™ à nicroman
D'abord, c'est très mal... si la fonction de service-bind a été implémentée ainsi c'est parcequ'il y a une raison: on n'a pas a attendre que le service soit bindé.
De plus on ne doit jamais faire de sleep() ou wait() dans le thread UI. J'imagine que cela n'a pas été interdit pour laisser quand même deux ou trois fonctions IO disponibles, mais le but est que toutes les fonctions UI (dont onCreate) finissent aussi vite que possible.
De toute manière, les cas que sleep()/wait()/notify() sont hyper hyper rares... a part des managers de message / worker-threads / IO....

Maintenant l'explication (à mon avis la plus plausible):
La méthode qui va binder le service va envoyer un Intent.
Cet Intent ne sera utilisé qu'au retour de la fonction onCreate() (même process pour le service)
Même si il était utilisé immédiatement (process différent), le message envoyé en réponse ne sera processé par la pile de message *que* si le message "create" (appel de la fonction onCreate) a fini d'être processé...
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
Et surtout
nicroman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 21h33   #3
Gébix
Membre du Club
 
Inscription : décembre 2005
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 156
Points : 51
Points : 51
nicroman : merci pour ta réponse

J'ai encore réfléchi au problème et en fait il faut utiliser les méthodes de la connection afin d'assurer que le binding soit effectif.
Gébix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h11.


 
 
 
 
Partenaires

Hébergement Web