日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Android静态变量的生命周期

發(fā)布時(shí)間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android静态变量的生命周期 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Android是用Java開發(fā),其靜態(tài)變量的生命周期遵守Java的設(shè)計(jì)。我們知道靜態(tài)變量是在類被load的時(shí)候分配內(nèi)存的,并且存在于方法區(qū)。當(dāng)類 被卸載的時(shí)候,靜態(tài)變量被銷毀。在PC機(jī)的客戶端程序中,一個(gè)類被加載和卸載,可簡單的等同于jvm進(jìn)程的啟動和結(jié)束。那么在Android中呢?用的 Dalvik vm也是一樣的。不過Android不太突出的進(jìn)程概念,所以對靜態(tài)變量的生命周期就會感覺模糊,這種模糊對于值類型是無所謂的,如果是靜態(tài)的對象引用, 則與內(nèi)存回收、內(nèi)存泄漏這些問題有關(guān),有必要加深研究和理解。
一、靜態(tài)變量在類被加載的時(shí)候分配內(nèi)存。
類在什么時(shí)候被加載?
當(dāng)我們啟動一個(gè)app的時(shí)候,系統(tǒng)會創(chuàng)建一個(gè)進(jìn)程,此進(jìn)程會加載一個(gè)Dalvik VM的實(shí)例,然后代碼就運(yùn)行在DVM之上,類的加載和卸載,垃圾回收等事情都由DVM負(fù)責(zé)。也就是說在進(jìn)程啟動的時(shí)候,類被加載,靜態(tài)變量被分配內(nèi)存。
二、靜態(tài)變量在類被卸載的時(shí)候銷毀。
類在什么時(shí)候被卸載?
在進(jìn)程結(jié)束的時(shí)候。
說明:一般情況下,所有的類都是默認(rèn)的ClassLoader加載的,只要ClassLoader存在,類就不會被卸載,而默認(rèn)的ClassLoader生命周期是與進(jìn)程一致的,本文討論一般情況。
三、Android中的進(jìn)程什么時(shí)候結(jié)束
這個(gè)是Android對進(jìn)程和內(nèi)存管理不同于PC的核心——如果資源足夠,Android不會殺掉任何進(jìn)程,另一個(gè)意思就是進(jìn)程隨時(shí)可能會被殺掉。而 Android會在資源夠的時(shí)候,重啟被殺掉的進(jìn)程。也就是說靜態(tài)變量的值,如果不做處理,是不可靠的,可以說內(nèi)存中的一切都不可靠。如果要可靠,還是得 保存到Nand或SD卡中去,在重啟的時(shí)候恢復(fù)回來。
另一種情況就是不能把退出所有Activity等同于進(jìn)程的退出,所以在用戶點(diǎn)擊圖標(biāo)啟動應(yīng)用的時(shí)候,以前存放于靜態(tài)變量中的值,有可能還存在,因此要視具體情況給予清空操作。
四、Application也是一樣不可靠
Application其實(shí)是一個(gè)單例對象,也是放在內(nèi)存中的,當(dāng)進(jìn)程被殺掉,就全清空了,只不過Android系統(tǒng)會幫重建Application,而我們存放在Application的數(shù)據(jù)自然就沒有了,還是得自己處理。
五、靜態(tài)引用的對象不會被垃圾回收
只要靜態(tài)變量沒有被銷毀也沒有置null,其對象一直被保持引用,也即引用計(jì)數(shù)不可能是0,因此不會被垃圾回收。因此,單例對象在運(yùn)行時(shí)不會被回收.

轉(zhuǎn)載于:https://www.cnblogs.com/Free-Thinker/p/3398357.html

總結(jié)

以上是生活随笔為你收集整理的Android静态变量的生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。