IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

async load GoogleMap


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 172
    Points : 70
    Points
    70
    Par défaut async load GoogleMap
    Bonjour à tous,

    Voila j'ai utilisé une GoogleMap API2 inclue dans un fragment.

    Le soucis c'est que je dois positionner 3061 marker sur cette map et que cela bloque l'UIThread forcément.

    En fait:
    - je clique sur un bouton qui ouvre 4 fragments dont celui de geolocalisation
    - le soucis, c'est que le chargement du fragment de Geoloc freeze totalement les 3 autres et que ce n'est juste pas possible

    J'aimerais donc faire les
    de façon asynchrone mais une asynctask semble impossible car cette methode DOIT être dans l'UIThread (d'après les logs).

    Quelqu'un peut il me donner une solution pour que ce chargement des markers ne bloque pas les autres fragments SVP???

    MERCI beaucoup d'avance.

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    3061 ?

    As-tu *réellement* besoin d'afficher TOUT ces marqueurs en même temps ?
    À moins d'avoir une résolution absolument gigantesque, je ne peux imaginer aucune représentation utilisable d'autant de POI sur un terminal mobile (smartphone ou tablette).

    Pourquoi ne pas plutôt les répartir en zone, sous-zone et afficher uniquement ceux qui correspondent à la vue en cours ?

    Une AsyncTask pourrait le faire, avec le onProgress pour afficher petit à petit, mais c'est plus un détournement qu'une solution. À mon humble avis, tu as plus un problème de conception qu'un problème d'implémentation.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 172
    Points : 70
    Points
    70
    Par défaut
    en fait l'ecran affiche une map avec les markers puis une listview en dessous.

    > la Listview "controle" la map : quand on scroll dans la liste des clients triés par distance, la map zoom/dezoom automatiquement en fonction du LastVisibleItem

    > du coup faire une chargement par zone reviendrait a faire un chargement de markers de plus en plus consequent (a la fin ce serait meme les 3600 d'un seul coup) ce qui n'est pas possible puisque cela freezerait totalement l'UI.


    >> pour le moment je charge les markers par paquets de 100
    > cela me permet de ne pas freeze les autres fragments en ne chargeant que les 100 1ers marqueurs
    > OnScroll : suivant la position du lastVisible, je recharge un paquet de 100 et ainsi de suite...

    Sur Galaxy S3, je n'ai aucun ralentissement mais bon c'est le S3

    pour l'asyntask ce n'est pas possible dans le sens ou la methode addmarker DOIT être appelée dans le main thread (UI Thread).

    Ceci dit en fouillant le net j'ai cru comprendre que l'API2 de GMaps aurait bientot un "MarkerManager" pour gerer le chargement/affichage des markers?

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Avec ton algo, déjà, l'idée se précise, ça aurait été bien de le fournir dès le début
    Quand même, je me demande si c'est visible et exploitable.

    Tu as aussi des possibilités de clustering avec la map V2.
    Voici une lib le faisant : https://github.com/mrmans0n/android-maps-v2-clustering. Je crois qu'il y en a d'autres. Ca pourrait peut-être t'aider.

    La méthode "onProgress" d'une AsyncTask est appelée dans l'UI Thread, pour information.

    Tester sur un smartphone haut de gamme est une très mauvaise idée, car tu n'as aucune idée des ralentissements et des problèmes engendrés par des solutions coûteuse.
    Bien sûr, si ton application est interne et est uniquement utilisée par des S3, ce problème ne se pose pas.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 172
    Points : 70
    Points
    70
    Par défaut
    Avec ton algo, déjà, l'idée se précise, ça aurait été bien de le fournir dès le début
    my fault

    Aprés le comportement est demandé par le client, ce n'est pas moi qui décide

    La méthode "onProgress" d'une AsyncTask est appelée dans l'UI Thread, pour information.
    mais du coup cela refreezera l'UI :/

    En fait, je ne comprend pas pourquoi on ne peut pas utiliser addMarker dans le doInBackground() d'une Asyntask

    Merci pour la librairie de clustering, cela me sera sans doute utile ultérieurement mais dans le cas présent, ce ne sera pas possible car le fait de cliquer sur un client dans la liste doit également rezoomer sur le marker correspondant et afficher l'infoWindow associée

    Cependant, je pourrais tjs la soumettre au client

    pour l'histoire des perfs, vu les utilisateurs, je pense qu'ils seront munis de smartphones haute gamme, mais si tu pense à une meilleure solution (moins couteuse) que le chargement par paquets je suis preneur

    En tout cas, merci pour ton aide

Discussions similaires

  1. insertion des blob avec LOAD DATA...
    Par orli1x51 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/10/2003, 18h05
  2. visualation d'un Loading en local
    Par poxvx dans le forum Flash
    Réponses: 5
    Dernier message: 15/07/2003, 11h05
  3. Création d'un loading
    Par FLB dans le forum Flash
    Réponses: 5
    Dernier message: 09/07/2003, 22h08
  4. Loading
    Par Hermant dans le forum Flash
    Réponses: 2
    Dernier message: 17/02/2003, 11h28
  5. Comment insérer un loading ?
    Par ajit dans le forum Flash
    Réponses: 4
    Dernier message: 21/11/2002, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo