前幾天去面試時(shí)遇到個(gè)技術(shù)問(wèn)了個(gè)讓我一臉懵逼的問(wèn)題,大概是他在ActivityB中需要ActivityA的實(shí)例,所以他在ActivityA中搞了個(gè)靜態(tài)變量引用ActivityA實(shí)例。然后直接在ActivityB中使用。
至于我為啥懵逼,那是因?yàn)樗皠倖?wèn)過(guò)我內(nèi)存泄漏的問(wèn)題
內(nèi)存泄漏嘛,簡(jiǎn)單說(shuō)就是該釋放的內(nèi)存沒(méi)釋放掉
相信大家都知道在android中static修飾的變量的生命周期等同于整個(gè)app的運(yùn)行周期。如果如上文中那么做,假設(shè)不把ActivityA中引用自己的靜態(tài)變量置為null,那么ActivityA的實(shí)例就會(huì)一直存在直到app運(yùn)行結(jié)束,即使在ActivityA中調(diào)用finish()來(lái)關(guān)閉ActivityA,onDestroy即使被調(diào)用ActivityA也依然存在,ActivityA中類(lèi)變量也沒(méi)有釋放掉,內(nèi)存空間也依然被占用。
這就是非常典型的內(nèi)存泄漏嘛。
所以記下這個(gè)來(lái)時(shí)時(shí)提醒自己,項(xiàng)目中慎用static。