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 :

Problème de performance application android


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Par défaut Problème de performance application android
    Bonjour,

    J'ai commencé une application android et j'ai un gros soucis de performances. Actuellement j'affiche par l'intermédiaire d'une sufaceView un background et une image (une bulle) qui se déplace. Le déplacement est saccadé et je ne comprends pas pourquoi.
    Voici mon code actuel : https://github.com/SebGonzalez/Sumble

    La surfaceView est créé dans la classe SurfaceViewBulle et la classe DrawingThread affiche cette surfaceView dans un thread.


    Merci d'avance

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Dans un premier temps, tu pourrais déjà convertir tes images au format webp, notamment le backgroung...

    http://tools.android.com/tech-docs/webp

  3. #3
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    ici il pourrait boucler indéfiniment si le join ne se fait pas, sans pouvoir sortir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void surfaceDestroyed(SurfaceHolder holder) {
            mThread.keepDrawing = false;
    
            boolean joined = false;
            while (!joined) {
                try {
                    mThread.join();
                    joined = true;
                } catch (InterruptedException e) { //? on ne sort pas }
            }
    }
    A partir d'ici, je pense que c'est le code à vérifier car l'Update est dans une boucle While, l'update ayant aussi une boucle For et OnDraw également.
    Ca fait beaucoup de travail pour le processeur.
    N'y a t'il pas une sorte de DoEvents() comme en VB????
    Tu ne laisses pas le processeur gérer ses propres messages.
    Je ne parle pas de mettre des sleep!!!! (horreur) mais de laisser le processeur "s'auto gérer".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    synchronized (mSurfaceHolder) {
                            //on déplace la bulle
                            update();
                            // Et on dessine
                            onDraw(canvas);
    }
    Pense à réutiliser les variables:
    Ex: For(Bulle bulle : ...) => changer la boucle (en for..to par exemple) afin de réutiliser bulle et à le définir en dehors de la boucle.

  4. #4
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Par défaut
    Ok j'ai donc converti mon background en webp et ajouté un " e.printStackTrace();" dans mon catch.
    Pour le for du update et du onDraw j'ai essayé de l'enlever et d'affecter le déplacement et l'affichage seulement au premier élément de la liste mais j'ai toujours ce soucis de latence lors du déplacement.

    Pour les sleep j'ai vu ça sur un tuto d'openClasseroom, apparemment c'était pour "afficher l'écran à 50fps".

  5. #5
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Tu utilises beaucoup de mémoire (comme la variable bulle) avec des images.
    As-tu bien fait les déréférences? bulle = null; avant de lui réaffecter un objet?

    Si ces objets sont visibles à l'écran, n'est ce pas plus simple de changer leurs coordonnées plutôt que de les effacer et redessiner?
    Si l'image ne change pas, ce serait une perte de temps d'essayer de le redessiner...

    As-tu pensé à l'accélération graphique? (dans le manisfeste).

    Quel est ton moteur de rendu?

    Les moteurs de rendu ont déjà été confrontés à ce genre de problème...

  6. #6
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 51
    Par défaut
    Je ne récréé pas les objet bulle à chaque fois normalement. J'utilise juste la méthode update qui modifie leurs coordonnées et je les ré affiche avec la méthode onDraw.

    Je n'ai rien trouvé sur le web pour activer l'accélération graphique.

    Pour le moteur de rendu je crois que je n'en utilise pas

Discussions similaires

  1. Problème de structure application Android
    Par chucknorrisop dans le forum Android
    Réponses: 4
    Dernier message: 04/11/2014, 12h00
  2. Problème application Android sur Galaxy S2
    Par frimeman dans le forum Android
    Réponses: 2
    Dernier message: 01/08/2011, 01h45
  3. Divers problèmes de performance sur une application Swing
    Par Julien Bodin dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 06/09/2010, 15h28
  4. Problème de performance sur application WPF 4 (rendertransform ? cast ?)
    Par tom741 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 20/05/2010, 14h13

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