溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

activity 的view 回收

發(fā)布時(shí)間:2020-07-05 01:29:09 來(lái)源:網(wǎng)絡(luò) 閱讀:1265 作者:吳細(xì)福 欄目:開發(fā)技術(shù)

疑問(wèn)一:android程序運(yùn)行機(jī)制是怎樣的?該看那些數(shù)來(lái)了解?
疑問(wèn)二:如題:比如我的一個(gè)布局文件中有兩個(gè)button,然后在onCreate中聲明了兩個(gè)引用變量指向這兩個(gè)button,并注冊(cè)監(jiān)聽器響應(yīng)用戶動(dòng)作。我所疑惑的是在方法里定義的變量不是隨著方法的結(jié)束而銷毀的嗎?就像以上的兩個(gè)指向button的變量,那onCreate后變量不存在了還如何來(lái)監(jiān)聽用戶動(dòng)作? 還有就是activity在經(jīng)歷了oncreate,onstart,onresume方法后是處于一種什么樣的狀態(tài)?我的猜測(cè)是就是處在一種監(jiān)聽用戶動(dòng)作的狀態(tài)了,但就像上面提到的方法內(nèi)定義變量的疑惑那樣,我認(rèn)為界面上的組件(如button)不是應(yīng)該定義為activity的成員變量才能成立才好理解嗎?
望賜教!


activity  的view 回收

我覺得Activity創(chuàng)建好以后,其所對(duì)應(yīng)的XML布局文件會(huì)在內(nèi)存中建立好視圖樹對(duì)象層次結(jié)構(gòu)(在內(nèi)存的堆區(qū));而在onCreate方法中使用 findViewById 方法,獲得的是堆區(qū)中視圖控件對(duì)象的指針。當(dāng)onCreate方法結(jié)束后,只是銷毀了onCreate方法內(nèi)部定義的局部變量(棧區(qū)內(nèi)存),并沒有銷毀堆區(qū)的內(nèi)存,所以,視圖控件仍然可以點(diǎn)擊,并做出事件響應(yīng)。(即activity對(duì)象堆區(qū)在oncreate()方法后就有成員變量view,該view的生命周期是跟隨activity對(duì)象的不是隨著oncreate()方法的)


oncreate中有個(gè)方法叫setContentView,每一個(gè)Activity都會(huì)加載一個(gè)視圖,就是說(shuō)有一個(gè)成員變量View,setContentView(View),就是給這個(gè)成員變量賦值,所以說(shuō)oncreate里面定義的兩個(gè)button雖說(shuō)是局部變量,同時(shí)也是VIew這個(gè)成員變量的屬性,Button btn = this.findViewById();這里用this來(lái)findView,說(shuō)明button已經(jīng)存在于activity中,btn這個(gè)局部變量是成員變量View通過(guò)Id找出來(lái)的,而不是new 出來(lái)的。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI