Je vais avoir du mal à comprendre pourquoi ce codeallocation bitmap Android bizarreries
public class BitmapAllocTest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); byte[] b = new byte[20 * 1000 * 1000]; b = null; Bitmap.createBitmap(2500, 2000, Bitmap.Config.ARGB_8888); } }
lance une exception OutOfMemory sur un dispositif avec une limite de tas de 24MB. Si je commente l'une ou l'autre des allocations, cela fonctionne bien. J'avais l'impression que java vm essaierait de ramasser les ordures avant de lancer les exceptions OutOfMemory.
Je suppose qu'il s'agit d'android allouer les bitmaps sur le tas natif.
J'ai essayé d'appeler votre suggestion System.gc() avant l'attribution bitmap, également essayé attraper l'erreur, appelant gc(), puis essayer de répartir à nouveau le bitmap. Je reçois toujours l'erreur OOM cependant. :( – Viktor
pouvez-vous me montrer comment vous appelez et retenter – WarrenFaith
octet [] b = new byte [20 * 1000 * 1000];? b = null; System.gc(); try { Bitmap.createBitmap (2500, 2000, Bitmap.Config.ARGB_8888); } catch (e OutOfMemoryError) { System.gc(); Bitmap.createBitmap (2500, 2000, Bitmap.Config.ARGB_8888);} – Viktor