麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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

2020-04-11 12:13:03
字體:
供稿:網(wǎng)友

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

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

類在什么時候被加載?

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

二、靜態(tài)變量在類被卸載的時候銷毀。

類在什么時候被卸載?

在進程結(jié)束的時候。

說明:一般情況下,所有的類都是默認的ClassLoader加載的,只要ClassLoader存在,類就不會被卸載,而默認的ClassLoader生命周期是與進程一致的,本文討論一般情況。

三、Android中的進程什么時候結(jié)束

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

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

四、Application也是一樣不可靠

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 在线看免费观看av | 久久国产精品久久精品国产演员表 | 久久久久久久亚洲精品 | 久久久日韩精品一区二区 | 中文字幕精品在线视频 | 国产深夜福利视频在线播放 | 91午夜免费视频 | 黄色特级毛片 | 九九热在线视频免费观看 | 亚洲欧美在线视频免费 | 精品国产专区 | 伊人午夜视频 | 日本a在线观看 | 亚洲一区二区三区日本久久九 | 国产91精品久久久久久 | 日韩视频在线观看免费视频 | 午夜精品网 | 国产精品免费观在线 | 午夜久久久精品一区二区三区 | 一级免费视频 | 国产精品观看在线亚洲人成网 | 黄色毛片一级视频 | 精品人成 | 日本大片在线播放 | 一区二区久久久久草草 | 2019亚洲日韩新视频 | 国产精品久久久久久久久久久久久久久 | h色视频网站 | 一级在线观看视频 | 国产精品v片在线观看不卡 成人一区二区三区在线 | 久久国产在线观看 | 中文字幕在线成人 | 国产精品免费一区二区三区都可以 | 7777在线视频免费播放 | 国产亚洲精品久久久久久久 | 爱逼av| 欧美成人午夜一区二区三区 | 视频国产一区二区 | 精品视频在线免费看 | 日本在线观看视频网站 | 久久久婷婷一区二区三区不卡 |