# Android Gallery Problem



## Dagobert (23. Jun 2012)

Guten Tag,
Nachdem ich gemerkt habe, das die erste App Idee etwas zu viel für ein Anfänger ist, habe ich beschlossen eine Wallpaper App zu basteln.
Zum Bilder anzeigen hab ich eine Gallery verwendet. Jedoch hackt diese ungemeint oO
Wo ist denn die Bremse im Code?
Teil der Activity

[JAVA=43]
mGallery = (Gallery) findViewById(R.id.gallery);
		mGallery.setSpacing(50);
		mGallery.setAdapter(new ImageAdapter(this));
		mGallery.setOnCreateContextMenuListener(this);
[/code]

und der Adapter:


```
package de.muehlensoft.hornpaper;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter {

	private Context mContext;
	
	private int[] mImagesIds = {
		R.drawable.horn1,	
		R.drawable.horn2,
		R.drawable.horn3,
		R.drawable.horn4,
		R.drawable.horn5,
		R.drawable.horn6,
		R.drawable.horn7,
		R.drawable.horn8,
		R.drawable.horn9,
		R.drawable.horn10,
	};
	
	public int getCount() {
		return mImagesIds.length;
	}

	public ImageAdapter(Context context){
		this.mContext = context;
	}
	
	public Object getItem(int position) {
		return position;
	}

	public long getItemId(int position) {
		return mImagesIds[position];
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		ImageView view = new ImageView(mContext);
		view.setImageResource(mImagesIds[position]);
		return view;
	}

}
```
Wer sich von der (nicht) Performanz überzeugen möchte^^
App

mfg. Dagobert


----------



## schlingel (24. Jun 2012)

Einziger Vorschlag für die Optimierung:

Cache die ImageViews und erstelle sie nicht ständig neu.

```
public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null) {
          convertView = new ImageView(mContext);
        }
        convertView.setImageResource(mImagesIds[position]);
        return convertView;
    }
```

Ansonsten musst du dich leider mit crappy Performance abfinden. Ich persönlich finde außerdem, dass das Verhalten eines ViewPagers deutlich natürlicher wirkt als dass der Gallery da so immer ein Bild den Fokus bekommt und nicht links und rechts die anderen Bilder sichtbar sein können.


----------



## Dagobert (25. Jun 2012)

Ich hab dein Tipp mal verfolgt, jedoch muss ich leider feststellen, dass das recyclen der view mein Problem nicht merklich verbessert.
Dann habe ich noch die Bitmaps vorgeladen und gecacht. Dies endet jedoch teilweise in einer outOfMemory-Exception.
Dies habe ich erstmal dadruch beseitigt, das ich die Bilder nur noch als Preview mit der halben Größe lade. Dies reicht erstmal bis ich weiter Bilder gesammelt habe =) Dann muss ich wohl weiter optimieren.
Wenn ich dies gemach habe, werde ich meine Lösung präsentieren =)

mfg. Dagobert


----------



## Blindxantos (25. Jun 2012)

Testest du auf dem Emulator oder auf (einem) echten Gerät(en)? 

Beim Emulator kann man, glaub ich, bei den Einstellungen den zur verfügung stehenden Speicher erhöhen.


----------



## Dagobert (25. Jun 2012)

Ich teste auf echten Geräten, da mein Lappy zu schwach für die Emulatoren ist


----------



## schlingel (26. Jun 2012)

> Beim Emulator kann man, glaub ich, bei den Einstellungen den zur verfügung stehenden Speicher erhöhen.


Davon kann ich nur abraten. Wenn man einmal eine Stelle hat die vom RAM des Devices abhngt, sitzt man schon in der Vorhölle drinnen - ganz egal ob sie der Papst abgeschafft hat oder nicht. (Jedenfalls so meine Erfahrung =D)


----------

