2 回答

TA貢獻1862條經(jīng)驗 獲得超7個贊
當用戶離開一個task一段時間后,系統(tǒng)就會清理掉task里出了rootActivity以外的Activity,如果用戶又回來了,顯示的是rootActivity,就像是用戶離開又回來,是放棄以前的東西,開始新的東西。上面說的是默認的情況,有一些Activity的屬性可以用來控制和修改這些行為。
alwaysRetainTaskState
如果一個task里的root Activity的alwaysRetainTaskState屬性設置為true,那么前面描述的默認情況就不會出現(xiàn)了,task即使過了一段時間也會一直保留所有的Activity。
clearTaskOnLaunch
如果一個task里的root Activity的clearTaskOnLaunch屬性設置為true,和alwaysRetainTaskState相反,即使是一瞬間的離開,系 統(tǒng)馬上就會清理掉task里出rootActivity以外的所有Activity。
擴展資料
堆棧的作用:
在絕大多數(shù)的平臺上,堆棧主要完成這么四個事情:
1、臨時數(shù)據(jù)存放。
主要通過 push 和 pop 兩個指令完成。這就好比,我們在工作的時候,手邊臨時拿不了的東西,先暫時放在桌子上,等手頭空閑下來了,再移動到該存放的地方。
2、存放函數(shù)局部變量。
3、存放函數(shù)的虛參。
4、記錄調(diào)用軌跡。
稍大的程序一般是一個函數(shù)調(diào)用另一個函數(shù),然后再調(diào)用其他函數(shù)......為了能夠讓函數(shù)執(zhí)行后按照原先的順序返回,堆棧就必須記錄調(diào)用的軌跡。
堆棧要求太高而導致溢出的原因:
1、需要臨時存儲的信息太多了。這種情況多發(fā)生在用內(nèi)部函數(shù)(例如 max 、read、數(shù)組整體賦值 )處理較大量的數(shù)組。這種時候,我們可以用循環(huán)來代替一些內(nèi)部函數(shù),或者用循環(huán)分批次地處理內(nèi)部函數(shù)。
2、函數(shù)局部變量太大。局部變量多數(shù)存儲在堆棧里,當它很大是,就容易溢出。尤其針對數(shù)組大小由虛參給定的情況。

TA貢獻1824條經(jīng)驗 獲得超6個贊
你不是申請內(nèi)存出錯,是訪問了未分配的地址。這就是內(nèi)存越界造成的,越界寫了你不該寫內(nèi)存區(qū)域。
內(nèi)存地址空間是要先申請才能使用的,但不光是你用,c++運行庫也有一些全局變量,其中就有你new內(nèi)存的記錄、包括new的這段內(nèi)存的大小、起始地址。如果你越界修改了內(nèi)存,那就有兩種可能:1、訪問到了未申請的地址空間,直接報錯,2、修改到不是你申請的內(nèi)存地址空間,比如說c++運行庫的全局變量。
問題的本質(zhì)在于你之前越界訪問了內(nèi)存空間,好好檢查你代碼吧。
- 2 回答
- 0 關注
- 536 瀏覽
添加回答
舉報