recykling w zasadzie oznacza .. bezpłatne/wyczyszczenie wszystkich danych powiązanych z odpowiednim zasobem. W Androidzie możemy znaleźć recykling dla Bitmap i TypedArray.
Po sprawdzeniu obu plików źródłowych można znaleźć zmienną binarną "mRecycled", która jest "false" (wartość domyślna). Jest przypisany do "true", gdy wywoływany jest recycle.
Teraz, jeśli sprawdzasz tę metodę (metodę recyklingu w obu klasach), wówczas możesz zauważyć, że czyści wszystkie wartości.
Tutaj znajdą Państwo metody.
Bitmap.java:
public void recycle() {
if (!mRecycled && mNativePtr != 0) {
if (nativeRecycle(mNativePtr)) {
// return value indicates whether native pixel object was actually recycled.
// false indicates that it is still in use at the native level and these
// objects should not be collected now. They will be collected later when the
// Bitmap itself is collected.
mBuffer = null;
mNinePatchChunk = null;
}
mRecycled = true;
}
}
TypedArray.java
public void recycle() {
if (mRecycled) {
throw new RuntimeException(toString() + " recycled twice!");
}
mRecycled = true;
// These may have been set by the client.
mXml = null;
mTheme = null;
mAssets = null;
mResources.mTypedArrayPool.release(this);
}
ta linia
mResources.mTypedArrayPool.release(this);
wyda TypedArray z SunchronisedPool którego wartość domyślna wynosi 5. Więc nie powinien ponownie używać tego samego typedArray, ponieważ zostanie wyczyszczony.
Gdy "mRecycled" z TypeedArray jest prawdziwe, to podczas pobierania jego własności rzuci RuntimeException, mówiąc "Nie można wykonywać połączeń z poddanymi recyklingowi!".
Podobnie zachowują się zachowania bitmapowe. Mam nadzieję, że to pomaga.
Uwaga boczna: GC oznacza "wywóz śmieci". – Vinay
Nie rozumiem. Ostatni odsyłacz sprawia, że wywołanie recycle() umożliwia ponowne użycie wewnętrznej tablicy. Czy nie oznacza to, że uniemożliwia to zbieranie tablicy GC?Dlaczego mówisz, że czyni dane związane z "a" gotowymi na GC? – gsingh2011
@ gsingh2011 umożliwia "ponowne użycie przez późniejszego dzwoniącego". Prawdą jest, że treść dokumentacji jest nieco niezręczna, ale to, co robią, polega na tym, że pamięć skojarzona z 'TypedArray' może być ponownie użyta przez późniejszego wywołującego (nie sama instancja, jak rozumiesz to w granicach twojego programu). Dlatego w dokumentacji jest napisane: "Po wywołaniu tej funkcji nie wolno ponownie dotykać tablicy.". – Vinay