Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Réduire le temps de chargement

SQLite très lent

    25 janvier 2013 à 10:36:16

    Bonjour, j'ai une application android composée de plusieurs Activity. Certaines de ces activity réalise des connexions et des accées à une base de donnée internet (utilisation de la DAO).

    Le problème est que lorsque j'essaye d'ouvrir une activity qui possède une connexion à la BDD (insert, ou select + affichage), l'activity peut prendre jusqu'à 15 secondes à s'afficher.

    Quel est le meilleur moyen dans mon cas pour réduire ce temps de chargement?

    Merci !

    • Partager sur Facebook
    • Partager sur Twitter
      25 janvier 2013 à 14:22:22

      Bonjour,

      Comment fais-tu tes appels à ta BDD ? Utilises-tu des thread ou des tâches asynchrones ?

      Lorsque tu développes des applications avec interface graphique, il ne faut jamais faire des traitements qui prennent du temps dans le thread de l'interface graphique !

      Lance tes appels BDD dans un autre thread ou dans un tâche asynchrone. Et pour indiquer à l'utilisateur que ton application effectue une tâche de fond, tu peux utiliser une progress bar que tu affiches le temps que ton résultat final s'affiche à l'écran.

      • Partager sur Facebook
      • Partager sur Twitter
        25 janvier 2013 à 14:29:06

        Wapiti89 a écrit:

        Lance tes appels BDD dans un autre thread ou dans un tâche asynchrone. Et pour indiquer à l'utilisateur qu'on ton application effectue une tâche de fond, tu peux utiliser une progress bar que tu affiches le temps que ton résultat final s'affiche à l'écran.


        Je suis d'accord avec toi, enfin du point de vue de l'utilisateur c'est bien plus agréable. Par contre en faisant tous les appels BDD dans des tâches asynchrones j'ai eu le même problème il y a quelques temps, environ 10 sec pour charger 1ko de données -_-' Je sais plus comment j'ai réglé le problème, mais je crois que c'était en rapport avec le cache du téléphone :colere2:
        • Partager sur Facebook
        • Partager sur Twitter
          25 janvier 2013 à 15:00:53

          voici comment j'utilise la BDD dans le fichier ligneActivity :

          //Création d'une instance de ma classe Ligne
                  LigneDAO ligneBDD = new LigneDAO(this);
           
                  //On ouvre la base de données pour écrire dedans
                  ligneBDD.open();
                  
                  @SuppressWarnings("rawtypes")
          		List dateList = ligneBDD.selectionner4LigneDate(iti);

          Voici la fonction selectionner4LigneDate() du fichier LigneDAO :

          public List selectionner4LigneDate(String iti) {
          			Cursor c = mDb.query(true,TABLE_NAME, new String[] {DATE}, ITINERAIRE + " LIKE \"" + iti +"\"", null, null, null, null, null);
          			return ConvertCursorToListObject(c, "selectionner4LigneDate");
          }

          Donc d'après vous je dois mettre l'appel :

          List dateList = ligneBDD.selectionner4LigneDate(iti);

          dans un thread à part?



          • Partager sur Facebook
          • Partager sur Twitter
            25 janvier 2013 à 15:07:57

            Salut !

            C'est ça ! Tu trouvera plus d'information en suivant ce lien : http://www.siteduzero.com/informatique/tutoriels/creez-des-applications-pour-android/le-travail-en-arriere-plan

            Attention, je ne dis pas que le traitement des informations sera plus rapide, je dis juste que ton activité s'affichera immédiatement (les données ne s'afficheront elle que lorsque tu aura terminé ton traitement), mais ça ne donnera pas l'impression à ton utilisateur que l'application a planté.

            • Partager sur Facebook
            • Partager sur Twitter
              25 janvier 2013 à 16:59:55

              Dans le même genre que la ProgressBar tu peux utiliser une ProgressDialog, qui en plus peut empêcher l'utilisateur de quitter l'activité pour ne pas laisser ton thread qui fait la requête tourné pour rien (ou alors tu l’interromps).

              Pour ce qui est de la rapidité des requêtes, tu peux les effectuer avec des PreparedStatement.

              • Partager sur Facebook
              • Partager sur Twitter
              ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.

              [Android] Réduire le temps de chargement

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown