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 :

conseil implémentation application


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut conseil implémentation application
    Bonjour

    Je viens ici non pour un problème, mais pour un conseil.

    Pour faire vite, l'une des activité de mon application (associée a un layout donc) doit être capable d'afficher 3 image l'une sous l'autre avec, a coté de chacune d'elle, trois champs de texte.
    Et, chacune des image doit être récupérer sur internet (pas d'alternative possible)

    Pour le moment, j'utilise une ListView, associé a un adapter (et un holder)
    D'un point de vue esthétique, le résultat me plait, mais pas du tout d'un point de vue performance.
    En effet, lorsque l'activity se lance (lancé par une autre activité), il y a parfois une transition avec un écran noir, qui peux durer plusieurs secondes.
    Et, il n'y a rien dans le log qui m'indique ce qu'il peux se passer de mauvais.
    Le seul truc que je trouve bizarre dans le log, c'est que le holder (le holder de l'adapter listView) est beaucoup utilisé, du genre une dizaine de fois sur deux des item (je le sais car j'ai mis un Log dans le "else" du getView (pour ceux qui connaissent))

    Je me demande donc si, en terme de performance, il ne serait pas mieux d'utiliser genre une scrollView qui contiendrais trois relativeView (ou linearView, a voir), ca me permettrait de ne pas utiliser de holder (si bien sur le problème de performance vient de là)
    (je reprécise que toute mes image proviendrons d'internet)

    cordialement

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Salut,

    Sans voir ton code difficile de dire grand chose. Mais, à mon avis, ce n'est pas le mécanisme de ListView / Holder qui pose problème (si c'est bien implémenté).
    Là où tu va avoir des lenteurs, c'est surement pour la récupération de tes 3 images.
    Tu fais comment pour les afficher ? Tu télécharges les images dans le même thread que l'affichage ou tu as séparé voir différé l'affichage des images de l'affichage du reste de ta vue ?

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    10:05:21.136: INFO/dwnl_modifierPlat_DescriptionVinsParTrois(2320): com.max.Download@460b0258
    10:05:25.033: DEBUG/ProtoRequestListener(254): requestFailed()
    10:05:26.256: INFO/ActivityManager(254): Displayed activity com.max/.Main: 6678 ms (total 6678 ms)
    10:05:31.073: WARN/ActivityManager(254): Launch timeout has expired, giving up wake lock!
    10:05:31.076: WARN/ActivityManager(254): Activity idle timeout for HistoryRecord{46460f10 com.max/.DescriptionVinsParTrois}
    10:05:36.176: DEBUG/dalvikvm(1609): GC_EXPLICIT freed 91 objects / 8224 bytes in 93ms
    10:05:41.146: DEBUG/dalvikvm(1618): GC_EXPLICIT freed 161 objects / 8720 bytes in 67ms
    10:05:46.176: DEBUG/dalvikvm(1627): GC_EXPLICIT freed 194 objects / 11904 bytes in 89ms
    10:05:46.566: DEBUG/dalvikvm(2320): GC_FOR_MALLOC freed 2810 objects / 191392 bytes in 50ms
    10:05:46.716: INFO/(2320): ----------envoie du stream----------
    Voila une partie du log(avec le temps a gauche, c'est important)
    La premiere ligne du log correspond a la fin de la creation d'un objet que j'appelle download et qui contient une adresse url de base, et la derniere ligne correspond a la fin de la récupération d'un stream par internet

    Je met aussi la partie du code qui correspond

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public void test(){
            Download download = new Download(urlTmp, getBaseContext());
        	Log.i("dwnl_modifierPlat_DescriptionVinsParTrois", download.toString());
            download.GetFILE();
    }
     
    public InputStream GetFILE() throws InterruptedException {
    	if(!networkIsAvailable()){
    		Toast.makeText(mContext, "connexion au réseau impossible", 1000);
    		return null;
    	}
    	DefaultHttpClient httpClient = new DefaultHttpClient();
    	try {
    		HttpResponse res;
    		URI uri = new URI(url);
    		HttpGet methodget = new HttpGet(uri);
    		methodget.addHeader("pragma","no-cache");
    		res = httpClient.execute(methodget);
    		InputStream data = res.getEntity().getContent();
     
    		Log.i("", "----------envoie du stream----------");

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut
    Bon, j'ai trouvé un début de solution a cette latence.
    Ca vient du fait que j'utilisais le même thread pour l'affichage et pour le téléchargement.
    J'en suis donc venu a utiliser un asynctask.
    Ce que je fais, c'est que j'ai déplacer mes lignes dans la class test (sur l'exemple que je vous ai montré), et j'appelle "new DownloadFiles().execute(urlStr);" a la place dans la class test.
    Le problème, c'est que j'ai une grosse erreur, je vous montre le log.
    Ca fait planter l'application donc, mais le pire, c'est que après toute ces erreur, il y a quand même l'exécution de quelque ligne de code (comme par exemple, ce que j'ai mis à l'intérieur du doInBackground)

    le début du log concernant l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    11:50:06.530: WARN/dalvikvm(19646): threadid=1: thread exiting with uncaught exception (group=0x4001d7f8)
    11:50:06.540: ERROR/AndroidRuntime(19646): FATAL EXCEPTION: main
    11:50:06.540: ERROR/AndroidRuntime(19646): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.max/com.max.DescriptionVinsParTrois}: java.lang.NullPointerException
    11:50:06.540: ERROR/AndroidRuntime(19646):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    11:50:06.540: ERROR/AndroidRuntime(19646):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    11:50:06.540: ERROR/AndroidRuntime(19646):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    11:50:06.540: ERROR/AndroidRuntime(19646):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut probleme exécution thread
    Bonjour

    Lors de l'exécution de mon appli, j'ai un long traitement (un téléchargement) qui se fait.
    J'ai donc voulu essayer d'implémenter la partie concerné avec un asynctask, mais sans succés, j'avais a chaque fois des crache.
    J'ai donc décidé d'utiliser des thread en me disant que ce serait sans doute plus simple, mais pas vraiment finalement.

    Je sais bien que c'est pas une demande de résolution de problème a proprement parler, mais bon.
    Je ne comprend que peux le fonctionnement d'un thread.
    Au début, je pensais que le bout de code que je voulais exécuter a coté du thread principal devait se trouver dans le nouveau thread, mais il semblerais bien que ce ne soit pas si simple.
    Et, est ce que le handler est vraiment important ?

    Ce qu'il se passe, c'est que dans mon activity main, je sélectionne un item, et immédiatement après, une nouvelle activité est lancé (une activité qui contient une listView plus d'autre trucs)
    Le problème, c'est que la listView contient des image qui sont a chaque fois téléchargé sur le net, et ca peux prendre du temps, donc j'ai souvent un écran noir de plusieurs seconde entre les deux activités.
    C'est donc pour ca que je souhaiterais utiliser un thread, pour gérer la partie graphique et la partie téléchargement séparément.
    Mais, je sais plus trop où mettre mes parties de code (celle qui s'occupe de mettre a jour la liste view qui télécharge les données, celle qui s'occupe juste de l'affichage (gestion des boutons etc ...))
    Ma question est je sais bien un peu confuse, mais si quelqu'un pouvais un peu m'éclairer

    Cordialement

  6. #6
    Membre très actif Avatar de _Xavier_
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2009
    Messages : 311
    Par défaut
    Et le code ?

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut
    Justement, j'ai pas de code a présenter, parceque je ne sais pas trop comment faire dans ce cas précit.
    J'ai fait pas mal de prog en C par exemple, et d'utilisation fork/thread, mais là, je suis assez perdu.

    Je voudrais simplement comprendre quelle parti du code je dois mettre dans mon thread.
    Par exemple, ce que j'ai essayé de faire (sans succés, bien entendu)

    Avant, mon onCreate commencé comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.affichage_vins_par_3);
     
    	//modification du plat
    	try {
    		modifierSelection();
    	} catch (InterruptedException e) {
    		e.printStackTrace();
    		finish();
    		return;
    	}
    et la fonction modifierSelection() était comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void modifierSelection() throws InterruptedException{
    	url.modifierUrlPlat(platsRequete[positionPlat]);
    	url.modifierUrlPrix(budgetRequete[positionPrix]);
    	url.modifierUrlRegion(regionRequete[positionRegion]);
    	url.modifierUrlCouleur(couleurRequete[positionRegion]);
    	if(positionExtra==1)
    		url.modifierUrlExtra(couleurRequete[5]);
       	String urlStr = url.getUrl();
            Download download = new Download(urlStr, mContext);
        	dlTmp(download);
    }
    et, mon nouveau onCreate avec le thread est comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.affichage_vins_par_3);		
     
       	thread = new Thread(){
    		public void run(){
    			try {
    				url.modifierUrlPlat(platsRequete[positionPlat]);
    				url.modifierUrlPrix(budgetRequete[positionPrix]);
    				url.modifierUrlRegion(regionRequete[positionRegion]);
    				String urlStr = url.getUrl();
    				Download download = new Download(urlStr, mContext);
    				dlTmp(download);	  	
    			} catch (InterruptedException e){    				
    				e.printStackTrace();
    			}   			
    		};
    	};
    	thread.start();

  8. #8
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Par hasard, est-ce que ce que tu recherches à faire ne ressemblerais pas à ça ?
    http://mickael-lt.developpez.com/tut...rie-connectee/

  9. #9
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut
    Non, ce n'est pas ce que je cherche a faire.
    J'ai besoin d'avoir une liste de 3 item, les uns sous les autres. Et, chacun des item contien une image (téléchargé sur internet donc), et trois champs texte a sa droite. C'est donc bien une listView qu'il me faut.

    Mon problème, c'est au niveau du temps d'affichage comme je l'ai dit, et on m'a conseillé d'utiliser un thread ou un asynctask.
    Le problème, c'est que mon code ne fonctionne pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conseils developpement application
    Par FMC dans le forum Langage
    Réponses: 6
    Dernier message: 02/05/2007, 09h58
  2. [VB2005] Demande conseils pour application réseau
    Par arno2000 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/02/2007, 12h42
  3. [Forum][Conseil] Choix application forum
    Par Invité dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 21/07/2006, 22h09
  4. conseil pour application
    Par rabi dans le forum Delphi
    Réponses: 6
    Dernier message: 01/06/2006, 09h40
  5. Conseils sur Application client/serveur
    Par MICHELBORLAND dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/05/2006, 15h58

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