Hirdetés
- Poco X8 Pro Max - nem kell ide sem bank, sem akkubank
- Xiaomi Watch S1 - szép az idő
- Xiaomi 15T Pro - a téma nincs lezárva
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Honor Magic V3 - mágikus realizmus
- Samsung Galaxy A56 - megbízható középszerűség
- Apple iPhone 17 Pro Max – fennsík
- Kétezer eurós csomag lehet a Vivo X300 Ultra
- Samsung Galaxy S25 - végre van kicsi!
- Honor Magic8 Pro - bevált recept kölcsönvett hozzávalókkal
Új hozzászólás Aktív témák
-
Karma
félisten
válasz
lordjancso
#1221
üzenetére
Semmi nagy dologra nem gondoltam, két dolgot változtatnék a példán a rend kedvéért:
1) Ahogy nézem, nem használja fel az URLImageGetter a konstruktorban átadott Contextet, úgyhogy a tagváltozót és a paramétert törölném azonnal. Ha meg mégis kéne, akkor a View-tól kérném el.
2) A container tagváltozója ugyanennek az osztálynak erősen kapaszkodik (hard reference) a View-ba, úgyhogy ha mondjuk a letöltés tíz percig tart, a felhasználó már régen továbbállt mert megunta, akkor se tudja a GC felszabadítani az egész Activityt.
Könnyen elkerülhető, ha a container tagváltozó nem View, hanem WeakReference<View> típusú. Két sort kell módosítani hozzá, és máris nem akadályozza a GC-t – csak le kell ellenőrizni onPostExecute-ban, hogy megvan-e még a View, vagy már vége.public class URLImageParser implements ImageGetter {
WeakReference<View> container;
public URLImageParser(View t) {
this.container = new WeakReference<View>(t);
}
public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
URLDrawable urlDrawable;
...
@Override
protected void onPostExecute(Drawable result) {
View c = URLImageParser.this.container.get();
if (c == null) return;
...
// redraw the image by invalidating the container
c.invalidate();
}
...
}
}[ Módosította: doc ]
Új hozzászólás Aktív témák
- LG 27G850A - 27" Nano IPS - UHD 4K - 240~480Hz 1ms - NVIDIA G-Sync - FreeSync Premium PRO - HDR 600
- 27% - ASUS VivoBook S15 OLED! Snapdragon X Elite / 16GB DDR5 / 1TB NVMe Notebook!
- GAMING PC! Ryzen 5700X / RTX 3070 / 32GB 3600MHz / SSD / 700w Gold!
- Spigen Essential Ee673eu 3-portos hálózati töltő 67W Fehér (2xUSB-C, 1xUSB-A)
- AKCIÓ! Nintendo Switch OLED 64GB játékkonzol garanciával hibátlan működéssel
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

