国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

第一行安卓代碼——活動的生命周期2.4

2019-11-09 14:17:04
字體:
來源:轉載
供稿:網友

我們知道Android中的活動是可重疊的。我們每啟動一個新的活動,就會覆蓋當前的活動,然后點擊Back就會銷毀最上面的活動,下面的一個活動就會重新顯示出來。

其實Anroid是使用任務【Task】來管理活動的,一個任務就是一組存放在棧里的活動的集合,這個棧也被稱作返回棧。棧是一種后進先出的數據結構,在默認情況下,每當我們啟動了一個新的活動時,處于棧頂的活動會出棧,這時前一個入棧的活動就會重新處于棧頂的位置。系統總是會顯示處于棧頂的活動給用戶。

下面說一下活動在其生命周期的四種狀態:

1、運行狀態

當一個活動位于返回棧的棧頂時,這時活動就處于運行狀態。系統最不愿意回收的就是處于運行狀態的活動,因為這會帶來非常差的用戶體驗。

2、暫停狀態

當一個活動已經不再處于棧頂,但是仍然可見,這時活動就進入了暫停狀態。你可能說既然活動既然不在棧頂了,還怎么會可見呢?這是因為并不是每一個活動都會占滿整個屏幕,比如對話框形式的活動只會占用屏幕中間的部分區域。系統也不愿意去回收這種活動。除非是內存極低的情況。

3、停止狀態

當一個活動不再處于棧頂位置,并且完全不可見時,就進入了停止狀態,系統仍然需要仍然為這種活動保存相應的狀態和成員變量,但是這并不是完全可靠的,當其他地方需要內存的時候,停止狀態的活動就會被系統回收。

4、銷毀狀態

當一個活動從返回棧中移除后就變成了銷毀狀態。系統就會最傾向于回收處于這種狀態的活動,從而保證手機的內存充足。

Activity類中定義了7個回調方法,覆蓋了活動生命周期的每一個環節,下面就一一介紹這7個方法。

Oncreate();

會在活動第一次被創建時調用。可以在這里完成初始化操作,比如加載布局,綁定事件

Onstart();

這個方法在活動由不可見到可見時調用

OnPause()

這個方法在系統準備去啟動或恢復另一個活動時調用。我們通常在這個方法中將一些消耗CPU的資源消耗掉,以及保存一些關鍵數據,但這個方法的執行速度一定要快,不然會影響到新的棧頂活動的使用。

Onstop()

在活動完全不可見時調用,它和Onpause的區別是,如果新啟動的活動是一個對話框式的活動,那么OnPuase方法會得到執行,而OnStop方法不會執行

OnDestory()

在活動被銷毀時調用

OnRestart()

在活動由不可見到可見時調用

以上7個方法除了OnRestart()方法,其他都是兩兩相對的,從而又可以將活動分為3種生存期

完整生存期——OnCreate——OnDestory可見生存期——OnStart——OnStop前臺生存期——OnResume——OnPause

ok,前面說活動狀態的過程中提到了系統回收,那么就產生了一個問題,假設我正在活動A編輯文字,跳轉到了B,A就處于停止狀態了,這是系統內存不足,A被回收。當從B再到A時,新建A活動,之前編輯的東西都丟了,這是很影響用戶體驗的。

怎么辦呢?

Activity中有一個OnSaveInstance()回調方法,這個方法可以保證在活動被回收之前一定被調用,因此我們可以通過這個方法來解決活動被回調時數據得不到保存的問題。 代碼如下

@OverridePRotected void OnSaveInstanceState(Bundle outState) { super.onSaveInstance(outState); String tempData = "Something you just typed"; outState.putString("data_key, tempData);}

同時修改OnCreate()方法

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState != null) { String tempData = savedInstanceState.getString("data_key"); } }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 墨竹工卡县| 庄河市| 富民县| 宜宾市| 吉木萨尔县| 新巴尔虎右旗| 济源市| 英山县| 刚察县| 安泽县| 丰都县| 乌兰县| 通山县| 安徽省| 金湖县| 天祝| 莫力| 江山市| 酒泉市| 磐石市| 洞口县| 交城县| 东乡县| 格尔木市| 额济纳旗| 崇仁县| 台州市| 洮南市| 景德镇市| 潍坊市| 张家口市| 寿光市| 桃园县| 大名县| 醴陵市| 宁晋县| 依兰县| 神农架林区| 中宁县| 土默特左旗| 怀化市|