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 :

Libération de la mémoire cache


Sujet :

Android

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 55
    Par défaut Libération de la mémoire cache
    Bonjour,
    j'ai essayé de faire l'affichage de mes items à l'aide d'un ViewGrid le problème c'est que pour le premier affichage tout va bien mais si je fais un autre run l'ecran se bloque et rien ne s'affiche et lorsque j'appuie sur le bouton HOME de mon emulateur une tel erreur s'affiche

    j'ai pensé qu'il s'agit d'un problème de memoire pour cela j'ai utilisé les threads mais le problème reste le mm voici le code que j'ai saisi

    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
     
    public class Rayon extends Activity {
    	private ContainerData container;
    	private Thread thread;
    	private Handler handler;
    	private ArrayList<MyDep> mesDep = new ArrayList<MyDep>();
    	private GridView gridview;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.rayon);
    		gridview = (GridView) findViewById(R.id.gridview);
    		Log.i("", "begin parsing");
    		thread = new Thread(){
            	public void run(){
     
            		container = new ContainerData();
            		mesDep = container.parseDep();
    		        handler.sendEmptyMessage(0);    			
            	};
            };
            thread.start();
    		Log.i("", "begin view");
    		  handler = new Handler(){
    	    		public void handleMessage(Message msg) { 
    	    			if(msg.what == 0) {
    	    				 gridview.setAdapter(new ImageAdapter(Rayon.this, mesDep));
    	    			}
    	    		}
    	        };
     
    	}
    la classe ImageAdapter hérite de BaseAdapter cela et le code de la méthode getView()

    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
     
    	@Override
    	public View getView(int arg0, View arg1, ViewGroup arg2) {
    	MyIcon icon;
    	Log.i("", "inflater");
    	if (arg1 == null)
    	{
    		arg1 = myInflater.inflate(R.layout.icon, null);
    		icon = new MyIcon();
    		icon.txt = (TextView) arg1.findViewById(R.id.viewDep);
    		icon.image = (ImageView) arg1.findViewById(R.id.imageIcon);
    		arg1.setTag(icon);
    	} else {
    		icon = (MyIcon) arg1.getTag();
    	}
    	Log.i("", "recuperer the path");
        String sousChaine = mesDep.get(arg0).getImagePath().substring(15);
    	String sousChaine2 ="http://";
    	String url = sousChaine2.concat(sousChaine);
    	Bitmap b = telechargerImageBit(url);
    	Log.i("", url);
    	icon.image.setImageBitmap(Bitmap.createScaledBitmap(b, 60, 60, false));
    	Log.i("", "txt");
    	icon.txt.setText(mesDep.get(arg0).getName());
    	return arg1;
    	}

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    mais si je fais un autre run l'ecran se bloque et rien ne s'affiche et lorsque j'appuie sur le bouton HOME de mon emulateur une tel erreur s'affiche
    Cela veut dire que tu relance l'activity , ou que tu relance le thread a un moment t de ton activity ?

    De plus ce que tu mis dans le logcat n'aide pas beaucoup , pourrais-tu mettre un peu plus de log.

    De ce que je vois tu n'as pas besoin de passer par un thread .

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 55
    Par défaut
    Bonjour,
    l'exception se revele lorsque je click sur le boutour retour et puis je relance cette activité pour une deuxieme fois voici un peu plus de log


    il y a quelqu'un qui m'a proposé de garder une copie de mes data dès la premiere activité pour ne pas obliger l'application de faire le parsing du fichier depuis lequel je dois ajouter mes items à chaque fois ou je relace l'activité mais en tant que débutante cela n'a pas de sens pour moi. alors cela sera gentil de m'expliquer le contenu de ce conseil et merci.

  4. #4
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    l'exception se revele lorsque je click sur le bouton retour et puis je relance cette activité pour une deuxieme fois voici un peu plus de log
    Hmm le log que tu as posté ne m'aide pas trop , ce que j'aimerais savoir c'est où il bloque et avec quelle erreur ?
    Essaye de débugger ton application lors du deuxième retour à partir du onCreate , tu verras bien où ton programme se bloque .


    il y a quelqu'un qui m'a proposé de garder une copie de mes data dès la premiere activité pour ne pas obliger l'application de faire le parsing du fichier depuis lequel je dois ajouter mes items à chaque fois ou je relace l'activité mais en tant que débutante cela n'a pas de sens pour moi. alors cela sera gentil de m'expliquer le contenu de ce conseil et merci.
    Cela te permettra de gagner du temps sur la récupération de tes données de ton fichier xml. Maintenant cela implique de garder en mémoire les données et deuxième point c'est que ton fichier xml n'est pas modifié entre temps .
    Tu n'auras pas dans ce cas de mise à jour lorsque tu relances l'activity .

    A toi de voir ce qui est le plus intéressant pour toi , (en fonction du temps de calcul/ mise à jour du parser xml et de la taille mémoire de tes données)

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 55
    Par défaut
    Bonjour,

    voici le code de mon activity
    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    public class Rayon extends Activity {
    	private ContainerData container;
    	private Thread thread;
    	private Handler handler;
    	private ArrayList<MyDep> mesDep = new ArrayList<MyDep>();
    	private GridView gridview;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.rayon);
    		gridview = (GridView) findViewById(R.id.gridview);
    		Log.i("", "begin parsing");
    		thread = new Thread(){
            	public void run(){
     
            		container = new ContainerData();
            		mesDep = container.parseDep();
    		        handler.sendEmptyMessage(0);    			
            	};
            };
            thread.start();
    		Log.i("", "begin view");
    		  handler = new Handler(){
    	    		public void handleMessage(Message msg) { 
    	    			if(msg.what == 0) {
    	    				 gridview.setAdapter(new ImageAdapter(Rayon.this, mesDep));
    	    			}
    	    		}
    	        };
     
    	}
     public class ImageAdapter extends BaseAdapter{
    	 private class MyIcon{
    		 TextView txt;
    		 ImageView image;
    	 }
    	 	private ArrayList<MyDep> mesDep = new ArrayList<MyDep>();
    		private LayoutInflater myInflater;
     
    		public ImageAdapter (Context context, ArrayList<MyDep> mesDep)
    		{
    			this.myInflater = LayoutInflater.from(context);
    			this.mesDep= mesDep;
    		}
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return this.mesDep.size();
    	}
     
    	@Override
    	public Object getItem(int arg0) {
    		// TODO Auto-generated method stub
    		return this.mesDep.get(arg0);
    	}
     
    	@Override
    	public long getItemId(int arg0) {
    		// TODO Auto-generated method stub
    		return arg0;
    	}
     
    	@Override
    	public View getView(int arg0, View arg1, ViewGroup arg2) {
    	MyIcon icon;
    	Log.i("", "inflater");
    	if (arg1 == null)
    	{
    		arg1 = myInflater.inflate(R.layout.icon, null);
    		icon = new MyIcon();
    		icon.txt = (TextView) arg1.findViewById(R.id.viewDep);
    		icon.image = (ImageView) arg1.findViewById(R.id.imageIcon);
    		arg1.setTag(icon);
    	} else {
    		icon = (MyIcon) arg1.getTag();
    	}
    	Log.i("", "recuperer the path");
        String sousChaine = mesDep.get(arg0).getImagePath().substring(15);
    	String sousChaine2 ="http://";
    	String url = sousChaine2.concat(sousChaine);
    	Bitmap b = telechargerImageBit(url);
    	Log.i("", url);
    	icon.image.setImageBitmap(Bitmap.createScaledBitmap(b, 60, 60, false));
    	Log.i("", "txt");
    	icon.txt.setText(mesDep.get(arg0).getName());
    	return arg1;
    	}
     
     }
    	public static Bitmap telechargerImageBit(String url) {
    		Bitmap bm = null;
    		try {
    			URL aURL = new URL(url);
    			URLConnection conn = aURL.openConnection();
    			conn.connect();
    			InputStream is = conn.getInputStream();
    			BufferedInputStream bis = new BufferedInputStream(is);
    			bm = BitmapFactory.decodeStream(bis);
    			bis.close();
    			is.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return bm;
    	}
     
    }
    l'erreur se revele à ce niveau de ma methode getView()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Log.i("", "recuperer the path");
        String sousChaine = mesDep.get(arg0).getImagePath().substring(15);
    l'erreur c'est un nullPointerException pour ce que vous avez dit après j'avoue que j'arrive pas à comprendre une grande chose s'il y a un article à ce propos cela sera trp utile

Discussions similaires

  1. Problème Mémoire Cache
    Par Ryadus dans le forum Ordinateurs
    Réponses: 6
    Dernier message: 13/12/2005, 16h21
  2. libération de la mémoire après traitement ?
    Par isachat666 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/12/2005, 19h29
  3. [VB]Libération de la mémoire
    Par seroa dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 12/10/2005, 11h52
  4. mémoire cache
    Par cortex024 dans le forum Composants
    Réponses: 1
    Dernier message: 20/08/2005, 18h35
  5. Libération de la mémoire
    Par gibet_b dans le forum Composants VCL
    Réponses: 3
    Dernier message: 30/06/2004, 12h02

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