Hallo
Het project waarmee ik bezig ben is gebaseerd op http://romotive.com/, maar dan wel voor android. De bedoeling is om op basis van een event, bv.: gezichtsdetectie een bijhorende afbeelding te tonen.
Afbeelding bij voorbeeld: https://docs.google.com/f...oyDWtMS1kVUVQc0dKREU/edit
Die afbeelding wordt als een bitmap toegekend aan een ImageView. Omdat de afbeelding gans het scherm moet vullen zonder gebrek aan kwaliteit heb ik de grootte van de afbeelding gelijkgesteld aan de grootte van mijn scherm: 1280 bij 720 pixels. Mits het PNG afbeeldingen zijn met 32 bits diepte neemt een bitmap (1280*720*32)/1024= 28800kb in beslag. De java VM reserveert 65536kb geheugen waarmee het verhaal snel eindigt in een out of memory exception bij het laden van een andere afbeelding. De huidige oplossing die ik nu heb maakt gebruik van één van de BitmapFactory decode methods die een bitmap aanmaakt op basis van een path naar de afbeelding die opgeslagen is op de SD-kaart. Hierdoor kan ik wisselen van afbeelding zonder gebrek aan geheugen. Het zelfde probleem deed zich voor wanneer de applicatie in pauze ging en later terug de focus krijgt, dit heb ik zo opgelost: Wanneer de activity in pauze gaat maak ik de bitmap klaar voor de Garbage collector via de bitmap.recycle method vervolgens geef ik via System.gc een hint aan de Garbage collector dat het nu interessant kan zijn om de boel wat op te kuisen. In de onResume callback herstel ik de activity door de Bitmap opnieuw te laden en toe te kennen aan de ImageView.
Het werkt wel, maar echt top is het niet. Vandaar dat ik opzoek ben naar een betere oplossing. Op android developer staat er wat over Memory caching en Disk caching maar dit vindt ik wat onduidelijk en weet ook niet of dit de oplossing is die ik zoek.
http://developer.android....bitmaps/cache-bitmap.html
Daarnaast kan ik ook iets aan de afbeeldingen zelf doen. Bv.: ogen, mond en andere attributen als afzonderlijke afbeeldingen gebruiken en via code deze positioneren op het scherm. Voordeel kleinere afbeeldingen minder geheugen, nadeel positionering is niet gemakkelijk en wat met geheugenbeheer?
Kortom: tips, suggesties of mogelijke strategieën om het probleem aan te pakken zijn welkom, alvast bedankt.
Steve
Het project waarmee ik bezig ben is gebaseerd op http://romotive.com/, maar dan wel voor android. De bedoeling is om op basis van een event, bv.: gezichtsdetectie een bijhorende afbeelding te tonen.
Afbeelding bij voorbeeld: https://docs.google.com/f...oyDWtMS1kVUVQc0dKREU/edit
Die afbeelding wordt als een bitmap toegekend aan een ImageView. Omdat de afbeelding gans het scherm moet vullen zonder gebrek aan kwaliteit heb ik de grootte van de afbeelding gelijkgesteld aan de grootte van mijn scherm: 1280 bij 720 pixels. Mits het PNG afbeeldingen zijn met 32 bits diepte neemt een bitmap (1280*720*32)/1024= 28800kb in beslag. De java VM reserveert 65536kb geheugen waarmee het verhaal snel eindigt in een out of memory exception bij het laden van een andere afbeelding. De huidige oplossing die ik nu heb maakt gebruik van één van de BitmapFactory decode methods die een bitmap aanmaakt op basis van een path naar de afbeelding die opgeslagen is op de SD-kaart. Hierdoor kan ik wisselen van afbeelding zonder gebrek aan geheugen. Het zelfde probleem deed zich voor wanneer de applicatie in pauze ging en later terug de focus krijgt, dit heb ik zo opgelost: Wanneer de activity in pauze gaat maak ik de bitmap klaar voor de Garbage collector via de bitmap.recycle method vervolgens geef ik via System.gc een hint aan de Garbage collector dat het nu interessant kan zijn om de boel wat op te kuisen. In de onResume callback herstel ik de activity door de Bitmap opnieuw te laden en toe te kennen aan de ImageView.
Het werkt wel, maar echt top is het niet. Vandaar dat ik opzoek ben naar een betere oplossing. Op android developer staat er wat over Memory caching en Disk caching maar dit vindt ik wat onduidelijk en weet ook niet of dit de oplossing is die ik zoek.
http://developer.android....bitmaps/cache-bitmap.html
Daarnaast kan ik ook iets aan de afbeeldingen zelf doen. Bv.: ogen, mond en andere attributen als afzonderlijke afbeeldingen gebruiken en via code deze positioneren op het scherm. Voordeel kleinere afbeeldingen minder geheugen, nadeel positionering is niet gemakkelijk en wat met geheugenbeheer?
Kortom: tips, suggesties of mogelijke strategieën om het probleem aan te pakken zijn welkom, alvast bedankt.
Steve