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