国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android靜態(tài)變量的生命周期 簡(jiǎn)單介紹

2020-04-11 12:13:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Android是用Java開(kāi)發(fā),其靜態(tài)變量的生命周期遵守Java的設(shè)計(jì)。我們知道靜態(tài)變量是在類(lèi)被load的時(shí)候分配內(nèi)存的,并且存在于方法區(qū)。當(dāng)類(lèi)被卸載的時(shí)候,靜態(tài)變量被銷(xiāo)毀。在PC機(jī)的客戶(hù)端程序中,一個(gè)類(lèi)被加載和卸載,可簡(jiǎn)單的等同于jvm進(jìn)程的啟動(dòng)和結(jié)束。那么在Android中呢?用的Dalvik vm也是一樣的。不過(guò)Android不太突出的進(jìn)程概念,所以對(duì)靜態(tài)變量的生命周期就會(huì)感覺(jué)模糊,這種模糊對(duì)于值類(lèi)型是無(wú)所謂的,如果是靜態(tài)的對(duì)象引用,則與內(nèi)存回收、內(nèi)存泄漏這些問(wèn)題有關(guān),有必要加深研究和理解。

一、靜態(tài)變量在類(lèi)被加載的時(shí)候分配內(nèi)存。

類(lèi)在什么時(shí)候被加載?

當(dāng)我們啟動(dòng)一個(gè)app的時(shí)候,系統(tǒng)會(huì)創(chuàng)建一個(gè)進(jìn)程,此進(jìn)程會(huì)加載一個(gè)Dalvik VM的實(shí)例,然后代碼就運(yùn)行在DVM之上,類(lèi)的加載和卸載,垃圾回收等事情都由DVM負(fù)責(zé)。也就是說(shuō)在進(jìn)程啟動(dòng)的時(shí)候,類(lèi)被加載,靜態(tài)變量被分配內(nèi)存。

二、靜態(tài)變量在類(lèi)被卸載的時(shí)候銷(xiāo)毀。

類(lèi)在什么時(shí)候被卸載?

在進(jìn)程結(jié)束的時(shí)候。

說(shuō)明:一般情況下,所有的類(lèi)都是默認(rèn)的ClassLoader加載的,只要ClassLoader存在,類(lèi)就不會(huì)被卸載,而默認(rèn)的ClassLoader生命周期是與進(jìn)程一致的,本文討論一般情況。

三、Android中的進(jìn)程什么時(shí)候結(jié)束

這個(gè)是Android對(duì)進(jìn)程和內(nèi)存管理不同于PC的核心――如果資源足夠,Android不會(huì)殺掉任何進(jìn)程,另一個(gè)意思就是進(jìn)程隨時(shí)可能會(huì)被殺掉。而Android會(huì)在資源夠的時(shí)候,重啟被殺掉的進(jìn)程。也就是說(shuō)靜態(tài)變量的值,如果不做處理,是不可靠的,可以說(shuō)內(nèi)存中的一切都不可靠。如果要可靠,還是得保存到Nand或SD卡中去,在重啟的時(shí)候恢復(fù)回來(lái)。

另一種情況就是不能把退出所有Activity等同于進(jìn)程的退出,所以在用戶(hù)點(diǎn)擊圖標(biāo)啟動(dòng)應(yīng)用的時(shí)候,以前存放于靜態(tài)變量中的值,有可能還存在,因此要視具體情況給予清空操作。

四、Application也是一樣不可靠

Application其實(shí)是一個(gè)單例對(duì)象,也是放在內(nèi)存中的,當(dāng)進(jìn)程被殺掉,就全清空了,只不過(guò)Android系統(tǒng)會(huì)幫重建Application,而我們存放在Application的數(shù)據(jù)自然就沒(méi)有了,還是得自己處理。

五、靜態(tài)引用的對(duì)象不會(huì)被垃圾回收

只要靜態(tài)變量沒(méi)有被銷(xiāo)毀也沒(méi)有置null,其對(duì)象一直被保持引用,也即引用計(jì)數(shù)不可能是0,因此不會(huì)被垃圾回收。因此,單例對(duì)象在運(yùn)行時(shí)不會(huì)被回收

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 湟中县| 吉隆县| 绥阳县| 鸡泽县| 肇庆市| 吉水县| 乳山市| 故城县| 衢州市| 清远市| 余庆县| 临颍县| 盐源县| 博罗县| 米脂县| 屏东市| 阜南县| 集贤县| 镇宁| 柳林县| 工布江达县| 望都县| 汤原县| 高清| 西安市| 隆昌县| 昌江| 大田县| 乳源| 富民县| 杂多县| 邮箱| 塘沽区| 汉沽区| 织金县| 和田县| 镇宁| 临沭县| 马龙县| 桦南县| 浮梁县|