歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android活動的生命周期

Android活動的生命周期

日期:2017/3/1 9:09:39   编辑:Linux編程
掌握活動的生命周期對任何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

Copyright © Linux教程網 All Rights Reserved