簡單深入瞭解Activity

今天深入瞭解一下Activity組件。

Activity的狀態情況通常情況下系統會自動保存,只有當我們需要保存額外的數據的時候才需要用到這樣的功能。

調用onPause()和onStop()方法後的Activity實例仍然保存在內存中,所以Activity的信息和狀態是不會消失的,當activity從後臺轉變成前臺之後,所有的改變都會得到保留。

當內存不足的時候,系統可能會回收Activity並摧毀,此時內存就不會有了Activity的實例對象了,爲了避免情況,我們可以選擇性的覆寫OnSaveInstanceState(),接受一個Bundle參數,開發者可以將狀態存儲到這個Bundle的對象當中,萬一中途系統急剎車,將Acitivity銷燬了,用戶重新啓動該Activity並且調用onCreate(),bundle就會傳回去數據,回到被銷燬之前的狀態了。


---------------------------------------------------------------------------------------------------------------------


Activity四種啓動模式。

1.standard

2.singleTop

3.singleTask

4.singleInstance

首先我們要知道的是,Activity實例是存在於任務棧裏的,既然是棧,具有先進先出(FIFO)的特點。好比一把手槍上子彈,先進去的子彈先出來是一個意思。


1、standard(標準模式)

系統默認的啓動模式,啓動一個activity時,不管棧裏面存不存在這個實例,系統都會爲它新建一個activity實例,壓入棧裏。

2、singleTop(棧頂複用模式)

啓動一個activity的時候,如果當前的activity在棧頂,那麼系統就不會去再一次創建這個activity實例了,而是直接調用棧頂的activity的onNewIntent()。


3、singleTask(棧內複用模式)

這個啓動模式是相對於其他應用的activity,當只有啓動其他activity的時候纔會創建一個新的任務棧。系統會創建一個新的任務,並將新的activity放入到這個新的棧的底部,就是棧底。如果已經存在就不在創建這個實例了。


4、singleInstance(單實例模式)

這種啓動模式和singletask有點相似,當一個activity被聲明成singleinstance。那系統不會再往被聲明成singleInstance的任務裏面再添加新的activity。也就是說一個棧裏面只有一個activity也就是被聲明的。


-------------------------------------------------------------------------------------------------------------------

singleTop和standard模式的區別就是,singleTop是不再創建一個已經創建過的activity實例了,當跳轉的對象就是位於棧頂的activity,系統不會再生成一個新的activity實例。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章