Android笔记-Activity相关+内存泄漏
看了下,上次學(xué)習(xí)android還是17年的事情,,,,兩年過(guò)去了我現(xiàn)在終于來(lái)搞android了。。。
以下內(nèi)容參考自:《Android從學(xué)習(xí)到產(chǎn)品》,《深入理解java虛擬機(jī)》,《操作系統(tǒng)之哲學(xué)原理》
?
先甩一部分定義:
1.每一個(gè)Activity都可以啟動(dòng)另一個(gè)Activity來(lái)完成不同的動(dòng)作,每一次一個(gè)Activity啟動(dòng),前一個(gè)Activity就停止了,但是系統(tǒng)保留一個(gè)Activity在一個(gè)棧上(Back stack)。當(dāng)一個(gè)新的Activity啟動(dòng)時(shí),它會(huì)被推送到棧頂,取得用戶焦點(diǎn)。Back Stack 符合簡(jiǎn)單的“后進(jìn)先出”原則,所以當(dāng)用戶完成當(dāng)前Activity后單擊Back按鈕,它會(huì)被彈出棧(并且被摧毀),然后之前的Activity恢復(fù)。
?
這里延申一下(猜測(cè),沒(méi)有看過(guò)具體的Android底層,不確定是不是準(zhǔn)確的),這個(gè)Activity存儲(chǔ)的back stack 應(yīng)該是jvm中的VM Stack。
同步一下VM Stack是什么,就要討論jvm的運(yùn)行,java虛擬機(jī)在執(zhí)行java程序的過(guò)程中,會(huì)把它所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域,VM Stack是其中一個(gè)區(qū)域。
VM Stack (java virtual machine stacks)是線程私有的,他的生命周期與線程相同。(線程概念補(bǔ)充一下:運(yùn)行中的程序叫進(jìn)程,一個(gè)進(jìn)程占有一段內(nèi)存來(lái)執(zhí)行這個(gè)程序,一個(gè)進(jìn)程我們可以拆分為多個(gè)線程,多個(gè)線程使用同一段內(nèi)存空間來(lái)協(xié)同工作完成進(jìn)程。線程是進(jìn)程里面的一個(gè)執(zhí)行上下文,或者執(zhí)行序列。對(duì)于單核來(lái)說(shuō),一個(gè)時(shí)間段只能handle一個(gè)線程,多核可以有多個(gè)線程同時(shí)執(zhí)行,從而提高進(jìn)程的執(zhí)行速度)
VM stack 描述的是java方法執(zhí)行的內(nèi)存模型:每個(gè)方法執(zhí)行的同時(shí)都會(huì)創(chuàng)建一個(gè)棧幀(stack Frame)用于存儲(chǔ)局部變量表,操作數(shù)棧,動(dòng)態(tài)鏈接,方法出口等信息。每一個(gè)方法從調(diào)用直至執(zhí)行完成的過(guò)程,就對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧中入棧到出棧的過(guò)程。
?
那么對(duì)于Android來(lái)說(shuō),內(nèi)存泄漏的場(chǎng)景有:1.Activity過(guò)多,內(nèi)存占滿,無(wú)法創(chuàng)建新的Activity對(duì)象;2.多個(gè)Activity單例化后,一直占據(jù)內(nèi)存資源,無(wú)法釋放;
?
具體怎么做的還沒(méi)有頭緒,等開發(fā)完了再研究吧。
轉(zhuǎn)載于:https://www.cnblogs.com/zhizhiyin/p/11199246.html
總結(jié)
以上是生活随笔為你收集整理的Android笔记-Activity相关+内存泄漏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VScode 快速更改编码格式
- 下一篇: Android 常用抓包工具介绍之Cha