掌握活動的生命周期對任何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一致
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11