9

Secondo Android Developers sito, la definizione Bitmap.recycle() metodo è:Quando (se necessario) dovrei usare Bitmap.recycle()?

libero l'oggetto nativo associato a questa bitmap, e cancellare il riferimento ai dati dei pixel

ho sviluppato un po ' applicazioni che creano/decodificano un sacco di bitmap e inseriscono gli oggetti bitmap del risultato su ImageView s. A volte ho le famose eccezioni come:

e

errore di memoria

Inoltre sono sicuro che dimensioni excceded bilancio vm

bitmap Non ho perdite di memoria che possono causare quello.

Dopo molte ricerche, ho scoperto il metodo "recycle" e l'ho utilizzato per liberare la memoria nativa della bitmap quando non era più necessaria. Sembra che abbia aiutato molto.

Sto chiedendo se è qualcosa che dovrei fare in questa situazione, perché So che il sistema lo sta facendo comunque senza chiamarlo esplicitamente (è vero? Forse ho sbagliato).

Devo utilizzare questo metodo in situazioni come questa?

In quali situazioni devo utilizzare questo metodo?

Devo usare questo metodo?

grazie in anticipo.

UPDATE:

google postato this guida di recente, che dice:

Su Android 2.3.3 (livello di API 10) ed inferiore, con riciclo() è raccomandato. Se visualizzi grandi quantità di dati bitmap nella tua app, è probabile che ti imbatti in errori OutOfMemoryError. Il metodo recycle() consente a un'app di recuperare la memoria il prima possibile.

+5

Non è necessario chiamare 'recyle'. Può aiutare, ma solo quando lo si utilizza correttamente. In realtà è molto più facile creare un 'WeakReference' sul tuo oggetto' Bitmap' e restituirlo. [Dovresti vedere questo Google parlare IO] (http://www.youtube.com/watch?v=_CruQY55HOk) – adneal

+0

@aneal: grazie, già visto quel video molto tempo fa. –

risposta

3

in quali situazioni dovrei utilizzare questo metodo?

Le bitmap vengono sottoposte a GC da GC ogni volta che decide. Tuttavia, in alcune situazioni potrebbe essere ritardata. E ricorda sempre la regola del pollice in java (Forse si applica anche a P.L.). La velocità di riciclaggio degli oggetti da parte di GC potrebbe non essere la stessa della velocità di creazione degli oggetti. A volte il GC è lento a riciclare.

così riciclare() significa che se si desidera liberare memoria più presto si dovrebbe chiamare riciclo()

dovrei utilizzare questo metodo a tutti ??

Questa è una chiamata avanzata, e normalmente non deve essere chiamato, in quanto il processo di GC normale liberare questa memoria quando non ci sono più riferimenti a questo bitmap.But se si trovano ad affrontare le questioni come la dimensione bitmap ha superato il budget vm o dell'errore di memoria quindi è necessario utilizzare questo.

0

Lo uso in operazioni in cui so che la bitmap non verrà più utilizzata.

public static Bitmap getMaskedContactImage (Context context, Bitmap contactImageBitmap, int maskToBeApplied) { 
    Bitmap mask = BitmapFactory.decodeResource(context.getResources(), maskToBeApplied); 
    Bitmap output = Bitmap.createBitmap(mask.getWidth(),mask.getHeight(), Config.ARGB_8888); 
    final Rect finalRect = new Rect(0, 0, contactImageBitmap.getWidth(), contactImageBitmap.getHeight()); 
    final Rect originRect = new Rect(0, 0, mask.getWidth(), mask.getHeight()); 
    Canvas canvas = new Canvas(output); 

    Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    xferPaint.setColor(Color.BLACK); 

    xferPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); 

    canvas.drawBitmap(contactImageBitmap, finalRect, originRect, null); 
    canvas.drawBitmap(mask, originRect, originRect, xferPaint); 

    contactImageBitmap.recycle(); 
    mask.recycle(); 

    return output; 
    } 

In luoghi come quello, non sono sicuro di utilizzare la maschera o il contattoImage.

Ho trovato una risorsa davvero buona per l'elaborazione Bitmap che può essere utile Displaying bitmaps.

saluti, Alex

Problemi correlati