靜態變量引用與內存回收、內存泄露這些問題有關,有必要加深研究和理解。
一、靜態變量在類被加載的時候分配內存。
類在什麼時候被加載?當我們啓動一個app的時候,系統會創建一個進程,此進程會加載一個DVM實例,然後代碼就運行在DVM之上,類的加載和卸載、垃圾回收等事情都由DVM負責。也就是說進程啓動的時候,類被加載,靜態變量被分配內存。
二、靜態變量在類被卸載的時候銷燬。
類在什麼時候被卸載?答:在進程結束的時候。說明:一般情況下,所有的類都是默認的ClassLoader加載的,只要ClassLoader存在,類就不會被卸載,而默認的ClassLoader生命週期是與進程一致的,這裏討論一般情況。
三、Android的進程什麼時候結束
- Android 會在資源不足的情況下,隨時殺掉進程,而且會Android會在資源足夠的時候,重啓被殺掉的進程。
- 不能把退出所有Activity等同於進程的退出,所以在用戶點擊圖標啓動應用的時候,以前存放於靜態變量中的值,有可能還存在,因此要視具體情況給予清空操作。
四、Application也是一樣不可靠
Application其實是一個單例對象,也是放在內存中的,當進程被殺掉,就全清空了,只不過Android系統會幫重建Application,而我們存放在Application的數據自然就沒有了,還是得自己處理。