Android活動的生命周期

blueberryf 8年前發布 | 8K 次閱讀 安卓開發 Android開發 移動開發

Android活動的生命周期

掌握活動的生命周期對任何Android開發者來說都非常重要,Android中的活動是可以層疊的,我們每啟動一個洗的活動,就會覆蓋在原活動之上,然后點擊Back鍵會銷毀最上面的活動,下面的一個活動就會重新顯示出來。

其實Android是使用任務(Task)來管理活動的,一個任務就是一組存放在棧里的活動的集合,這個棧也被稱作 返回棧(Back Task),棧是一種后進先出的數據結構,在默認情況下,每當我們啟動了一個新的活動,他會在返回棧中入棧,并處于棧頂位置,而每當我們按下Back鍵或者調用finish()方法去銷毀一個活動時,處于棧頂的活動就會出棧,這時前一個入棧的活動就會重新處于棧頂的位置,系統總是會顯示處于棧頂的活動給用戶

通過示例圖看返回棧是如何管理活動入棧出棧操作的:

活動狀態

1、運行狀態

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

2、暫停狀態

當一個活動不再處于棧頂位置,但仍然可見時,這時活動就進入了暫停狀態,比如對話框形式的活動只會占用屏幕中間的部分區域,你還可以看到后邊的界面,這是,后面的活動就處于暫停狀態

3、停止狀態

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

4、銷毀狀態

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

活動的生存期

Activity類中定義了七個回掉方法,覆蓋了活動生命周期的每一個環節:

1、 onCreate()

每個活動中都重寫這個方法,他會在活動第一次被創建的時候調用,你應該在這個方法中完成活動的初始化操作,比如加載布局、綁定事件。

2、 onStart()

這個方法在活動由不可見變為可見的時候調用

3、 onResume()

活動準備好和用戶進行交互時調用,此時的活動一定位于返回棧的棧頂,并且處于運行狀態

4、 onPause()

在系統準備去啟動或者恢復另一個活動的時候調用

5、 onStop()

這個方法在活動完全不可見的時候調用

6、 onDestroy()

這個方法在活動被銷毀之前調用,之后活動的狀態將變為銷毀狀態

7、 onRestart()

這個方法咋活動由停止狀態變為運行狀態之前調用,也就是活動被重新啟動了。

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

一、 完整生存期

活動在onCreate()方法和onDestroy()方法之間所經歷的,就是完整生存期

二、 可見生存期

活動在onStart()方法和onStop()之間所經歷的,在可見生命期內,活動對于用戶總是可見的,即便有可能無法和用戶進行交互。

三、 前臺生存期

活動在onResume()方法和onPause()方法之間所經歷的,這個生存期內,活動總是處于運行狀態,此時的活動是可以和用戶進行相互的,我們平時看到和接觸最多的也是這個狀態下的活動。

活動生命周期示意圖:

Activity的啟動模式

standard  標準模式

每次啟動都會打開新的實例

singleTop  棧頂唯一

如果要啟動的activity處于棧頂,則不再新建實例

singleTask  棧內唯一

如果要啟動的activty在Task已經存在,則不再新建實例

singleInstance  事例唯一

如果要啟動的activity已經存在,則不再新建實例

Intent與IntentFilter

Intent——意圖

用于android個組件的啟動和組件間傳遞數據

屬性:

component  目標組件描述

action  對Intent執行動作的描述

data  對此次Intent操作相關數據的描述

type  對Intent所關聯的數據類型的描述

category  對Intent執行動作的附加信息描述

extra  對其他一切附加信息的描述,他是對其他所有附加信息的集合

Intent-Filter——意圖過濾器

對Intent的描述進行過濾操作,對Intent的各個屬性進行匹配,從而選擇出相應的組件來執行Intent想要進行的操作

定義

<Intent-Filter>

<action name=“xxxxxxxxx”/>

<action name=“yyyyyyyy”/>

<category name=“ttttttttttt”/>

<category name=“uuuuuuu”/>

<data>

<data>

</Intent-Filter>

在IntentFilter中action、category、data都可以存在多個

匹配原則

action:Intent中的action只要和IntentFilter中的任意一個action一樣即可

category:Intent中添加的category必須全部在IntentFileter定義的ategory中

data:Intent中的data要和IntentFilter中的data的描述匹配

type:Intent中的type要和IntentFilter中data要求的mimeType一直

 

來自:http://www.cnblogs.com/dingxiansen/p/6057605.html

 

 本文由用戶 blueberryf 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!