Bonjour,

Depuis que j'essaye mon application sur android 2.3.3, elle ne fonctionne plus.

Mon activity possède 2 GridView avec quelques icônes. Et des que je passe d'un "contentview" à un autre 1 fois de trop, j'ai un message d'erreur qui m'a l'air de poser des problèmes à beaucoup de gens au vu de mes recherches :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
06-14 01:12:44.414: ERROR/AndroidRuntime(7432): FATAL EXCEPTION: main
06-14 01:12:44.414: ERROR/AndroidRuntime(7432): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
06-14 01:12:44.414: ERROR/AndroidRuntime(7432):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
06-14 01:12:44.414: ERROR/AndroidRuntime(7432):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:460)
06-14 01:12:44.414: ERROR/AndroidRuntime(7432):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336)
06-14 01:12:44.414: ERROR/AndroidRuntime(7432):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
06-14 01:12:44.414: ERROR/AndroidRuntime(7432):     at android.content.res.Resources.loadDrawable(Resources.java:1782)
06-14 01:12:44.414: ERROR/AndroidRuntime(7432):     at android.content.res.Resources.getDrawable(Resources.java:588)
06-14 01:12:44.414: ERROR/AndroidRuntime(7432):     at android.widget.ImageView.resolveUri(ImageView.java:501)
06-14 01:12:44.414: ERROR/AndroidRuntime(7432):     at android.widget.ImageView.setImageResource(ImageView.java:280)
Donc d'après ma recherche, j'utilise trop de mémoire (O_o), je veux bien, mais j'ai juste un Xml qui défini le GridView et ci-dessous le code de mon adapter :

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
public class MenuGridViewAdapter extends BaseAdapter
{
	private ArrayList<Integer> idIconList;
	private Context context;
	private int screenWidth;
 
	public MenuGridViewAdapter(Context c, ArrayList<Integer> list)
	{
		context = c;
		idIconList = list;
		Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
		screenWidth = display.getWidth();
	}
 
	public int getCount()
	{
		return idIconList.size();
	}
 
	public Object getItem(int item)
	{
		return item;
	}
 
	public long getItemId(int arg0)
	{
		return 0;
	}
 
	public View getView(int position, View convertView, ViewGroup parent)
	{
		ImageView imageView;
		// Calcul de la dimension maximum des marges
		int margin = (int) (screenWidth * 3 / 100);
		// Calcul de la dimension maximum des icônes
		int size = (int)((screenWidth - 4 * margin) / 3);
		if (convertView == null)
		{
			imageView = new ImageView(context);
			imageView.setPadding(margin, margin, margin, margin);
			imageView.setScaleType(ImageView.ScaleType.FIT_START);
			imageView.setLayoutParams(new GridView.LayoutParams(size, size));
			imageView.setImageResource(idIconList.get(position));
		}
		else
			imageView = (ImageView) convertView;
		return imageView;
	}
}
J'avais pour idée de désallouer par un recycle tous les éléments (imageview) du GridView mais je ne vois pas très bien comment faire ?

Et puis ça me parait étrange que cela ne soit pas fait automatiquement par le système non ?

Merci d'avance.