2 回答
TA貢獻1862條經驗 獲得超7個贊
當用戶離開一個task一段時間后,系統就會清理掉task里出了rootActivity以外的Activity,如果用戶又回來了,顯示的是rootActivity,就像是用戶離開又回來,是放棄以前的東西,開始新的東西。上面說的是默認的情況,有一些Activity的屬性可以用來控制和修改這些行為。
alwaysRetainTaskState
如果一個task里的root Activity的alwaysRetainTaskState屬性設置為true,那么前面描述的默認情況就不會出現了,task即使過了一段時間也會一直保留所有的Activity。
clearTaskOnLaunch
如果一個task里的root Activity的clearTaskOnLaunch屬性設置為true,和alwaysRetainTaskState相反,即使是一瞬間的離開,系 統馬上就會清理掉task里出rootActivity以外的所有Activity。
擴展資料
堆棧的作用:
在絕大多數的平臺上,堆棧主要完成這么四個事情:
1、臨時數據存放。
主要通過 push 和 pop 兩個指令完成。這就好比,我們在工作的時候,手邊臨時拿不了的東西,先暫時放在桌子上,等手頭空閑下來了,再移動到該存放的地方。
2、存放函數局部變量。
3、存放函數的虛參。
4、記錄調用軌跡。
稍大的程序一般是一個函數調用另一個函數,然后再調用其他函數......為了能夠讓函數執行后按照原先的順序返回,堆棧就必須記錄調用的軌跡。
堆棧要求太高而導致溢出的原因:
1、需要臨時存儲的信息太多了。這種情況多發生在用內部函數(例如 max 、read、數組整體賦值 )處理較大量的數組。這種時候,我們可以用循環來代替一些內部函數,或者用循環分批次地處理內部函數。
2、函數局部變量太大。局部變量多數存儲在堆棧里,當它很大是,就容易溢出。尤其針對數組大小由虛參給定的情況。
TA貢獻1824條經驗 獲得超6個贊
你不是申請內存出錯,是訪問了未分配的地址。這就是內存越界造成的,越界寫了你不該寫內存區域。
內存地址空間是要先申請才能使用的,但不光是你用,c++運行庫也有一些全局變量,其中就有你new內存的記錄、包括new的這段內存的大小、起始地址。如果你越界修改了內存,那就有兩種可能:1、訪問到了未申請的地址空間,直接報錯,2、修改到不是你申請的內存地址空間,比如說c++運行庫的全局變量。
問題的本質在于你之前越界訪問了內存空間,好好檢查你代碼吧。
- 2 回答
- 0 關注
- 560 瀏覽
添加回答
舉報

