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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android 智能指针 视频,Android系统智能指针中轻量级指针

發(fā)布時(shí)間:2025/3/15 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 智能指针 视频,Android系统智能指针中轻量级指针 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

lp、sp、wp在Android Native層中被大量使用,所以非常有必要學(xué)習(xí)它們的實(shí)現(xiàn)原理。lp是Light Pointer的縮寫(xiě),表示輕量級(jí)指針,sp是Strong Pointer的縮寫(xiě),表示強(qiáng)指針,wp是Weak Pointer的縮寫(xiě),表示弱指針。在Android系統(tǒng)中,智能指針包括輕量級(jí)指針lp(Light Pointer)、強(qiáng)指針sp(Strong Pointer)和弱指針wp(Weak Pointer)這三種。但無(wú)論是輕量級(jí)指針、強(qiáng)指針還是弱指針,它們的實(shí)現(xiàn)原理都一樣,即都由對(duì)象本身來(lái)作為引用計(jì)數(shù)值,但是對(duì)象本身不會(huì)去維護(hù)這個(gè)引用計(jì)數(shù)值,而是由智能指針來(lái)維護(hù)。

那么為什么Android中要實(shí)現(xiàn)這個(gè)智能指針呢?

我們都知道,在Native開(kāi)發(fā)中,如果new了一個(gè)對(duì)象,使用完之后忘記delete該對(duì)象,就會(huì)造成內(nèi)存泄漏。即使沒(méi)有忘記delete這個(gè)對(duì)象,也有可能delete了它之后,其他地方還繼續(xù)使用原來(lái)指向它的指針,造成系統(tǒng)崩潰。

為了避免這兩個(gè)問(wèn)題,Android系統(tǒng)的智能指針就出現(xiàn)了。它的做法是:使用引用計(jì)數(shù)的方法,每當(dāng)有一個(gè)指針指向一個(gè)新new出來(lái)的對(duì)象時(shí),就對(duì)該對(duì)象的引用計(jì)數(shù)值增加1,每當(dāng)有一個(gè)指針不再使用這個(gè)對(duì)象時(shí),就對(duì)該對(duì)象的引用計(jì)數(shù)值減少1,當(dāng)減1之后,如果發(fā)現(xiàn)引用計(jì)數(shù)值為0,就delete該對(duì)象,這樣就避免了忘記delete對(duì)象或者這個(gè)對(duì)象被delete之后還在其他地方使用的問(wèn)題。而加1和減1的工作就是由Android的智能指針來(lái)做的。我們知道,在C++中,對(duì)象的創(chuàng)建和消亡會(huì)分別調(diào)用它的構(gòu)造函數(shù)和析構(gòu)函數(shù),所以加1和減1的工作,實(shí)際上就放到了智能指針對(duì)象的構(gòu)造函數(shù)和析構(gòu)函數(shù)里,這也是稱(chēng)這個(gè)指針對(duì)象為智能指針的原因。

輕量級(jí)指針(lp)它的源代碼定義如下:

變量mCount是引用計(jì)數(shù)值,初始值為0,而incStrong()函數(shù)和decStrong()函數(shù)就是用于維護(hù)引用計(jì)數(shù)器值。incStrong()函數(shù)中調(diào)用android_atomic_inc()函數(shù)加1操作,而在decStrong()函數(shù)中調(diào)用android_atomic_dec()函數(shù)減1操作,如果引用計(jì)數(shù)值mCount為1,當(dāng)減1后,值就是0,于是就delete這個(gè)對(duì)象。這里要說(shuō)明的是,android_atomic_inc()函數(shù)和android_atomic_dec()函數(shù)都是原子操作。

而關(guān)于lp的使用,它要和強(qiáng)指針(sp)配合起來(lái)一塊用,比如:

此處首先定義一個(gè)子類(lèi)XXXClass,繼承LightRefBase模板類(lèi)。在XXXClass的main()函數(shù)里,首先new一個(gè)XXXClass對(duì)象,然后把這個(gè)對(duì)象賦值給智能指針lpointer,這時(shí)候引用計(jì)數(shù)值就為1,接著在main()函數(shù)里做一些工作。當(dāng)main()函數(shù)做完工作之后,退出main()函數(shù)的時(shí)候,lpointer會(huì)被析構(gòu),而析構(gòu)的時(shí)候,引用計(jì)數(shù)值減1之后就為0,于是,它會(huì)被delete。下面重點(diǎn)來(lái)看看sp,因?yàn)閟p最常見(jiàn)。

舉報(bào)/反饋

總結(jié)

以上是生活随笔為你收集整理的Android 智能指针 视频,Android系统智能指针中轻量级指针的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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