弱引用和軟引用WeakReference,SoftReference,最簡講解,以及一個應用場景
他講的很好,但是我看了一下,有些地方講的不是很清楚,導致我當時困惑了一會。這裡簡單加點內容。
實際上,
Car car = new Car(22000,"silver");
WeakReference<Car> weakCar = new WeakReference<Car>(car);
第一行就是new了一個例項,屬於強引用,這個還是很好理解的。下面那一行說是弱引用,可實際上又是怎麼用的呢?其實他就是讓你的強引用變成了弱引用。接下來,如果你再想引用這個car的話。我舉個例子。B b = new B(car);這個B類是接受一個car例項的,如果你後面這樣寫car ==null,這個 new Car(220000,“silver”)是會被回收的。但是如果你不把這個強引用轉化為弱引用,那麼當car==null的時候,你這個 new Car(220000,“silver”)是不會被回收的,這樣就很危險,容易OOM。
概念已經很清晰的講了,下面再講一個生動的應用場景,來自某一篇文章的評論。
看到一個android裡面用到,他是在gridview裡面載入大量圖片,然後每個圖片開一個執行緒進行載入,而且要保證imageView被回收。因為adapter是不太可控的,不知道什麼時候imageView被android設為null,而且自己的執行緒什麼時候載入完也不確定。所以執行緒裡面不敢用強應用,就是用的弱應用imageView
而SoftReference
就是和WeakReference有一點點的不同,SoftReference比較大方,在記憶體快用盡的時候才會回收這個物件。而Weak會很快就回收,強引用是就算記憶體不足了,也不會回收,這就是他的危險之處。
原文是http://blog.csdn.net/zmx729618/article/details/54093532,值得去看一下。
http://blog.csdn.net/matrix_xu/article/details/8424038還有這個文章也很好。