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 :

Optimisation de code


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 149
    Points : 109
    Points
    109
    Par défaut Optimisation de code
    Bonjour,

    j'ai une petite question pour la gestion des image.

    vaut t-il mieux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    image = Bitmap.createBitmap(image,image.getwith(),image.getheight(),false);
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Bitmap copyImage;
    copyImage = Bitmap.createBitmap(image,image.getwith(),image.getheight(),false;
    image.recycle();

  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
    Dans la doc, il est conseillé de ne pas utiliser recycle, sauf dans certains cas.

    Lien : http://developer.android.com/referen...#recycle%28%29

    Personnellement, je préfère invoquer cette méthode lorsque j'ai beaucoup d'images, la gestion mémoire devenant critique (après avoir regardé un peu via les outils dispo).
    J'ai pris l'habitude d'appeler recycle tout le temps, même si c'est inutile lorsque les images représentent une part négligeable de la mémoire utilisée.
    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
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 149
    Points : 109
    Points
    109
    Par défaut
    le problème c'est justement que je suis a la limite de la mémoire.

    et des fois ça dépasse aléatoirement je comprend pas donc c'est pour gagner le moindre octet disponible que je l'utilise

  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
    Le recycle pourra t'aider un peu.

    Toute tes images sont des drawable, pas des assets ?
    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
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 149
    Points : 109
    Points
    109
    Par défaut
    c'est les photo du téléphone que je charge en faite et je dois rajouter un cadre par dessus.
    Donc le problème c'est que je les charges toute dans un gridView pour que l'utilisateur choisisse et une fois choisit je l'affiche en grand avec un gallery de cadre par dessus pour qu'il puisse choisir le cadre.

    pour pouvoir travailler sur l'image je la redimensionne à la taille du cadre si elle est plus grande et des fois dans le redimensionnement il me jette mais c'est aléatoire des fois ça va le faire sur 2 photo et après sur 15 ou des fois pas du tout.

    j'ai trouvé deux solution mais qui me plaisent moyen

    1ere reduire le inSampleSize de l'image adapter pour le gridview mais les image sont pas très belle après

    2éme vider le gridview a chaque fois et ça ça oblige à tout recharger des qu'ont veut prendre une autre photo

  6. #6
    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
    Pourquoi toute les charger ?
    Pourquoi ne pas charger uniquement celles qui sont visibles et remplacer ensuite suivant la navigation ?

    Je n'ai jamais tenté de prendre les images stockées sur le téléphone, mais je pense qu'il doit bien y avoir un moyen de faire du lazy loading ('rendering" dans ce cas ?), plutôt que de tout charger en une fois.
    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

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 149
    Points : 109
    Points
    109
    Par défaut
    c'est vrai j'y avais même pas pensé.

    je vais regarder de ce cote et je te tiens au courant

    merci

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 149
    Points : 109
    Points
    109
    Par défaut
    j' ai cherché un peu et je vois pas comment l'implementer dans mon code

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    public class PhotoAlbumPhotoActivity extends BaseActivity {
     
    	private GridView album;
    	private ArrayList<File> lstPhoto;
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.photo_album_photo);
    		lstPhoto = ((BaseApplication) getApplicationContext()).getLstPhoto();
     
    		album = (GridView)findViewById(R.id.photo_gridview);
     
    		album.setAdapter(new ImgAdapter(this));
     
    		album.setOnItemClickListener(new OnItemClickListener() {
     
    			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
    				String path = lstPhoto.get(arg2).getPath();
    				Bitmap photo = BitmapFactory.decodeFile(path);
    				((BaseApplication)getApplicationContext()).photoSelec = photo ;
    				Intent in = new Intent(getApplicationContext(), PhotoActivityTakePhoto2.class);
    				startActivityForResult(in, BaseActivity.SKP_ACTIVITY_RET_HOME);
    				album.setAdapter(null);
    				finish();
    			}
    		});	
    	}
     
    	@Override
    	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    		if(resultCode == BaseActivity.SKP_ACTIVITY_RET_HOME){
    			// l'activite precedente a ete termine par l'utilisation du btn HOME
    			// on termine donc egalement l'activite courante
    			setResult(BaseActivity.SKP_ACTIVITY_RET_HOME);
    			finish();	
     		}
    	}
     
    	public class ImgAdapter extends BaseAdapter
    	{
    		Context myContext;		
     
    		public ImgAdapter (Context c)
    		{
    			myContext = c;
    		}
     
    		public int getCount() {
    			return lstPhoto.size();
    		}
     
    		public Object getItem(int position) {
    			return lstPhoto.get(position);
    		}
     
    		public long getItemId(int position) {
    			return position;
    		}
     
    		public View getView(int position, View convertView, ViewGroup parent) {
    			ImageView imageView;
    	        if (convertView == null) {  // if it's not recycled, initialize some attributes
    	            imageView = new ImageView(myContext);
    	            imageView.setLayoutParams(new GridView.LayoutParams(150, 150));
    	            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    	            imageView.setPadding(2, 2, 2, 2);
    	        } else {
    	            imageView = (ImageView) convertView;  
    	        }
     
    	        BitmapFactory.Options op = new BitmapFactory.Options();
    	        op.inSampleSize = 10;
    	        op.inPurgeable = true;
    	        imageView.setImageBitmap(BitmapFactory.decodeFile(lstPhoto.get(position).getPath(),op));
    	        return imageView;
    		}
    	}
     
    }
    comment dire à l'adapteur d'afficher que ce qui est visible?

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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