Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android的任務和回退棧簡介

Android的任務和回退棧簡介

編輯:Android開發教程

一個應用通常有多個Activity。每個activity圍繞一個特定的功能設計,用戶可以操作它並且可以啟動其他的activity。舉個例子,一個電子郵件應用可能有一個activity去呈現新郵件列表。當用戶選擇了一封郵件,會打開一個新的activity來呈現郵件內容。

一個activity可以啟動另一個應用的activity。例如,如果你的應用想要發送email,你可以定義一個intent來執行一個發送操作並且攜帶一些數據:email的地址,消息。一個其他應用的activity需要聲明可以處理這類的intent。在這個例子中,intent是要發送一封email,所以一個email應用會啟動(如果有多個activity支持同一個intent,系統會讓用戶選擇要使用哪一個)。當email被發送出去,你的activity會恢復,看起來,email activity就是你應用的一部分。為維護這種無縫的用戶體驗,盡管activity可能來自於不同的應用,android系統依然會將這些activity都保存在同一個任務中。

一個任務就是用戶為了執行特定工作而與之交互的activity的集合。這些activity會根據被打開的順序被安放在一個棧(回退棧)中。

設備的主屏幕是大多數任務的啟動場所。當用戶觸摸一個應用圖標,該應用的任務就會來到前台。如果該應用當時沒有任務,就會創建一個新任務,同時,主activity就會作為這個棧中的根activity被打開。

當一個activity啟動另一個activity時,這個新的activity會被放到棧的頂端並且獲得焦點。前一個activity仍然保存在棧中,但已經被停止了。當一個activity停止,系統會保存用戶界面面的當前狀態。當用戶按了返回按鈕,當前的activity會被彈出棧(activity會被銷毀)並且恢復前一個activity(使用剛被保存的UI狀態恢復)。在棧中的activity只有在彈出和壓入兩種操作–被當前activity啟動時壓入,用戶使用返回按鈕離開時彈出,除此之外,棧中activity位置和順序都不會發生變化。正應為這樣,回退棧的操作符合“後進先出”的原則。下面的圖沿著時間線演示了回退棧在不同時刻的進度。

如果用戶繼續按返回,那麼在棧中所有的activity都會被彈出,知道用戶返回到主屏幕(或者到該任務開始的地方)。當所有的activity都從棧中移除後,任務就不復存在了。

URL:http://www.bianceng.cn/OS/extra/201608/50395.htm

任務是一個緊密結合的單元,當用戶開始一向新任務或者回到主屏幕(通過主屏幕按鈕)時,它會被移到後台。當任務進入後台,棧中所有的activity都會停止,但是任務的回退棧會保持原封不動–當任務被另一個任務取代時只會簡單的失去焦點(如下圖所示)。任務可以重回到前台,所以用戶可以在哪“丟棄”在哪“撿起”它。舉個例子,有三個activity在當前任務(任務A)的棧中–其中兩個在當前activity的下面。這時,用戶按下Home鍵回到主屏幕,然後啟動了一個新的應用。當顯示主屏幕時,任務A進入後台。當新應用啟動時,系統未該應用啟動了一個新任務(任務B)。當用戶與該應用交互完畢之後,重新回到主界面並且選擇任務A的應用。這時,任務A回到前台–棧中的三個activity都原封未動並且恢復在棧頂的activity。在這個時候,用戶依然可以Home鍵返回主屏幕,選擇任務B的應用圖標來切換到任務B(也可以通過最近使用應用列表啟動)。這就是android多任務的一個例子。

注:在後台可以同時存在多個任務。但是,如果用戶在運行多個後台任務,系統可能會銷毀後台activity來回收內存,導致activity的狀態丟失。關於這方面內容後面小節講述。

因為在回退棧中的activity從來不會被重排,如果你的應用允許用戶從多個activity啟動一個特定的activity,那麼會新創建該activity的一個實例並且把它放到放到棧頂。因此,在你的應用中一個activity可能被實例化多次,如下圖所示。因此,用戶使用回退鍵返回,那麼每個activity的實例會按照被打開的反向順序被顯示。但是,如果你不想把一個activity實例化多次,你可以修改這種行為。關於如何修改,我們稍後會在“任務管理”一節中討論。

讓我們來總結一下activity和任務的默認行為:

當Activity A啟動Activity B,Activity A會停止,但是系統會保存Activity A的狀態(例如滾動條位置,編輯框中的文字等)。如果在Activity B時,玩家按返回鍵,會使用保存的狀態恢復Activity A。

當用戶按下Home鍵離開一個任務,當前的Activity會被停止並且當前任務會進入後台。系統保存該任務中所有Activity的狀態。如果用戶通過啟動圖標再次啟動該任務,該任務會回到前台並且恢復棧頂端的Activity。

如果用戶按下回退鍵,當前的Activity會從棧中彈出並且銷毀。棧中的前一個Activity被恢復。當一個Activity被銷毀時,系統不會保存該Activity的狀態。

Activity會被實例化多次,即使是由其他任務啟動的。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved