最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Android中關(guān)于靜態(tài)變量(static)的使用問(wèn)題

 更新時(shí)間:2017年01月03日 10:43:26   作者:Joanna.Yan  
本文主要介紹了Android中關(guān)于靜態(tài)變量(static)的使用問(wèn)題,具有一定的參考作用,下面跟著小編一起來(lái)看下吧

項(xiàng)目中,在不停地接收串口數(shù)據(jù)很長(zhǎng)一段時(shí)間(幾小時(shí))后,會(huì)偶然性的報(bào)錯(cuò)。初步排除了oom和cpu緊張問(wèn)題,因?yàn)槭枪I(yè)平板不方便調(diào)試,用了些比較笨的方法最后鎖定在幾個(gè)用了static的地方。在這里記錄下Android中使用static的一些問(wèn)題。

靜態(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ī)的客戶端程序中,一個(gè)類(lèi)被加載和卸載,可簡(jiǎn)單的等同于jvm進(jìn)程的啟動(dòng)和結(jié)束。在Android中,用的DVM也是一樣的,不過(guò)Android中不太突出進(jìn)程的概念,所以對(duì)靜態(tài)變量的生命周期就是感覺(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è)DVM實(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)。

另一個(gè)種情況就是不能把退出所有Activity等同于進(jìn)程的退出,所以在用戶點(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ì)被回收?

在除了Android之外的Java運(yùn)行環(huán)境中,你只要關(guān)心進(jìn)程生命周期,在進(jìn)程生命周期內(nèi)你可以放心地使用靜態(tài)變量來(lái)保持?jǐn)?shù)據(jù)。只要靜態(tài)變量沒(méi)有被銷(xiāo)毀也沒(méi)有置null,其對(duì)象一直被保持引用,因此不會(huì)被垃圾回收。因此單例對(duì)象在運(yùn)行時(shí)不會(huì)被回收。但是Android里它隨時(shí)會(huì)被系統(tǒng)置NULL。

總結(jié):

Android中,我們不知道何時(shí)進(jìn)程會(huì)被kill,所有:

1.不能保證靜態(tài)變量會(huì)一直存在。(進(jìn)程可能被Kill掉)

2.每次打開(kāi)app時(shí)靜態(tài)變量的值都是初始值(進(jìn)程沒(méi)有被kill掉所有靜態(tài)變量保存的還是上次的值)。

而靜態(tài)變量是不會(huì)被垃圾回收的,其對(duì)象一直保持引用,以ARC不可能是0。

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • Android編程實(shí)現(xiàn)讀取本地SD卡圖片的方法

    Android編程實(shí)現(xiàn)讀取本地SD卡圖片的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)讀取本地SD卡圖片的方法,涉及Android針對(duì)文件讀取及判定操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • Android桌面組件App Widget用法入門(mén)教程

    Android桌面組件App Widget用法入門(mén)教程

    這篇文章主要介紹了Android桌面組件App Widget用法,較為深入淺出的分析了Android桌面組件App Widget的功能、定義及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • Android天氣預(yù)報(bào)app改進(jìn)版

    Android天氣預(yù)報(bào)app改進(jìn)版

    這篇文章主要為大家詳細(xì)介紹了改進(jìn)版的Android天氣預(yù)報(bào)app,內(nèi)容更加充實(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Android中MPAndroidChart自定義繪制最高點(diǎn)標(biāo)識(shí)的方法

    Android中MPAndroidChart自定義繪制最高點(diǎn)標(biāo)識(shí)的方法

    目前在做一款軟件,要求在展示走勢(shì)圖的時(shí)候?qū)ψ罡唿c(diǎn)進(jìn)行自定義繪制,下面這篇文章主要給大家介紹了關(guān)于Android中MPAndroidChart自定義繪制最高點(diǎn)標(biāo)識(shí)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • 深入理解Android中的Window和WindowManager

    深入理解Android中的Window和WindowManager

    這篇文章給大家介紹了Window和WindowManager知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-02-02
  • android自定義ListView實(shí)現(xiàn)底部View自動(dòng)隱藏和消失的功能

    android自定義ListView實(shí)現(xiàn)底部View自動(dòng)隱藏和消失的功能

    本篇文章主要介紹了android自定義ListView實(shí)現(xiàn)底部View自動(dòng)隱藏和消失的功能 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Android進(jìn)程間使用Intent進(jìn)行通信

    Android進(jìn)程間使用Intent進(jìn)行通信

    Android進(jìn)程間通信(IPC,Inter-Process Communication)底層采用的是 Binder 機(jī)制,具體到應(yīng)用層有網(wǎng)友根據(jù)安卓四大組件將進(jìn)程間通信方式分為對(duì)應(yīng)的四種方式 Activity, Broadcast, ContentProvider, Service
    2023-02-02
  • Android端使用Modbus協(xié)議的簡(jiǎn)單方法

    Android端使用Modbus協(xié)議的簡(jiǎn)單方法

    Modbus協(xié)議是全球第一個(gè)用于工業(yè)現(xiàn)場(chǎng)的總線協(xié)議,與外設(shè)交互可以采用串口通信,tcp等方式,這篇文章主要給大家介紹了關(guān)于Android端使用Modbus協(xié)議的簡(jiǎn)單方法,需要的朋友可以參考下
    2021-11-11
  • Android?Studio實(shí)現(xiàn)彈窗設(shè)置

    Android?Studio實(shí)現(xiàn)彈窗設(shè)置

    這篇文章主要為大家詳細(xì)介紹了Android?Studio實(shí)現(xiàn)彈窗設(shè)置,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android?ViewBinding使用介紹

    Android?ViewBinding使用介紹

    最近這段時(shí)間在學(xué)習(xí)Kotlin,突然發(fā)現(xiàn)谷歌已經(jīng)把kotlin-android-extensions插件廢棄,目前推薦使用ViewBinding來(lái)進(jìn)行替代,接下來(lái)通過(guò)本文給大家分享Android使用ViewBinding的詳細(xì)步驟,感興趣的朋友一起學(xué)習(xí)吧
    2022-09-09

最新評(píng)論

井研县| 云安县| 淄博市| 铜鼓县| 高淳县| 师宗县| 汝城县| 吕梁市| 徐水县| 南京市| 南雄市| 濉溪县| 永州市| 永仁县| 三河市| 九龙城区| 辛集市| 新丰县| 绥化市| 浏阳市| 张家口市| 湖州市| 瓦房店市| 桐梓县| 会东县| 安顺市| 项城市| 莱阳市| 襄汾县| 金坛市| 始兴县| 寻甸| 泸溪县| 太保市| 任丘市| 莱阳市| 临江市| 大新县| 武义县| 巴南区| 尼玛县|