java - Activity中的成員變量被賦值之后,Activity被回收的時(shí)候內(nèi)存才會(huì)被釋放嗎
問題描述
Activity中的成員變量被賦值之后,Actiity被回收的時(shí)候內(nèi)存才會(huì)被釋放嗎java中一個(gè)類中的成員變量被賦值之后,這個(gè)類對象被回收時(shí),類中得成員變量才會(huì)被釋放內(nèi)存嗎
問題解答
回答1:這個(gè)問題應(yīng)該歸類到Java下. 只要是Activity所屬的對象被static持有了, 那就導(dǎo)致整個(gè)Activity一直存在在內(nèi)存中. 除非使用WearReference.
下面是一段類似的錯(cuò)誤代碼演示:
private static Context sContext;public static void setContext(Context context) { sContext = context;}
如果使用AndroidStudio, 那么IDE會(huì)有一段警告提醒: 不要賦值Context對象給static變量.
回答2:問題描述不清楚, 標(biāo)點(diǎn)符號(hào)都沒有差評(píng). 但是試一下回答:全局對象應(yīng)該只被static修飾符修飾的變量, static 修飾后的變量, 屬于這個(gè)類(class), 或者說改類對應(yīng)的所有對象, 而不屬于某個(gè)對象. 從這個(gè)推導(dǎo)一下, 應(yīng)該能認(rèn)識(shí)到一個(gè)對象被回收就引起static被回收是不對的(被回收了其他對象怎么用)這里說到了Activity, 再擴(kuò)展一下. 一般情況下, 使用static變量引用當(dāng)前對象是可以的(比如單例模式), 但是Android的設(shè)計(jì)上, Activity不是一般的類, 它有自己的生命周期, 到期就要被回收(因?yàn)楣δ芴珡?qiáng)大, 占用內(nèi)存太對). 所以就有了用static引用當(dāng)前Activity報(bào)內(nèi)存泄漏的問題.
