BitmapDrawable - NotFoundException

  • Antworten:6
  • Bentwortet
Duckemai
  • Forum-Beiträge: 63

29.10.2010, 15:41:06 via Website

Hallo zusammen,

ich habe ein Problem mit der Resourcen-Erkennung.

Ich habe mehrere Hintergrundbilder, die ich über eine ListPreference im Menü auswählen kann.
Zurück in der Activity-Class lese ich den Resourcenwert aus, wie folgt:

String wert_preferences = preferences.getString("Bilder", "picture_default");

View view = this.findViewById(R.id.hinterGrund);

int id = 0;
try {
id = R.drawable.class.getField(wert_preferences).getInt(null);
}

catch Blöcke...

/**id des Hintergrundbildes übergeben*/
BitmapDrawable bgImage = (BitmapDrawable) this.getResources().getDrawable(id);

Bei dieser letzten Zeile kommt es dann zu einer NotFoundException in der Resource.java.
Das kuriose ist, dass bei Start des Apps die Hintergrundbilder korrekt erscheinen. Obwohl bei Start ebenfalls
die obigen Funktionen durchlaufen werden.
Und erst, wenn ich das Menü benutze und wieder zur Activity wechsle kommt es zur Exception.
wert_preferences und id werden aber jedesmal befüllt. Es muss ein Problem von BitmapDrawable sein.

Jemand eine Idee?

Exceptioncode:
/**
* Return a drawable object associated with a particular resource ID.
* Various types of objects will be returned depending on the underlying
* resource -- for example, a solid color, PNG image, scalable image, etc.
* The Drawable API hides these implementation details.
*
* @param id The desired resource identifier, as generated by the aapt
* tool. This integer encodes the package, type, and resource
* entry. The value 0 is an invalid identifier.
*
* @throws NotFoundException Throws NotFoundException if the given ID does not exist.
*
* @return Drawable An object that can be used to draw this resource.
*/
public Drawable getDrawable(int id) throws NotFoundException {
synchronized (mTmpValue) {
TypedValue value = mTmpValue;
getValue(id, value, true);
return loadDrawable(value, id);
}
}

LogCat:
10-29 13:37:26.823: ERROR/dalvikvm-heap(1084): 4023746-byte external allocation too large for this process.
10-29 13:37:26.823: ERROR/(1084): VM won't let us allocate 4023746 bytes

Ich habe 6 Bilder. Jedes ist etwa 100.000 byte groß. Insgesamt also etwa 600.000 byte.



Vielen Dank
Duckemai

— geändert am 29.10.2010, 16:04:13

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

29.10.2010, 16:23:06 via Website

Entpackt sind die Bilder wie gross ?

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

29.10.2010, 16:30:56 via Website

Was meinst Du mit entpackt?
Es sind 6 Bilder in .jpg-Format (je ca 100.000byte).

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

29.10.2010, 16:41:52 via Website

Du willst diese Anzeigen ?

Bei RGB (8 Bit Pro Kanal) sind das 3x x*y = Bytes entpackt! Intern wird sowas oftmals als 32 Bit genutzt da der Speicher besser angesprochen werden kann.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

29.10.2010, 17:04:56 via Website

Ok. In dem Fall sind sie wirklich zu groß.

Ist es besser die Bilder kleiner abzulegen oder diese im laufenden Programm zu scalieren?

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

29.10.2010, 17:20:37 via Website

Hallo Duckemai,

es ist JEDENFALLS besser sie kleiner abzulegen. Warum?

  1. Man spart kostbaren Speicherplatz
  2. Du arbeitest mit kleineren Bildern auch Ressourcenschonender

Nicht vergessen .. wir arbeiten hier auf einem Device mit sehr begrenzten Ressourcen im Vergleich zu einem normalen PC. Ressourcen meint hier Speicherplatz, sowie CPU Takte die für etwas benötigt werden (die kosten Akku).
Und ein 100 Kbyte Bild klein zu skalieren dauert in CPU Zyklen gemessen nun mal wesentlich länger als ein 30 KByte Bild. Somit sparst Du einerseits Speicherplatz, schonst den Akku und bescherst dem Anwender darüber hinaus noch ein besseres UI-Erlebnis weil es schneller geht.

lg Voss

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

29.10.2010, 18:01:57 via Website

Habe die Bilder nun kleiner gemacht. Und alles läuft prima.

Danke an alle.

Antworten