Activity生命周期_第1頁
Activity生命周期_第2頁
Activity生命周期_第3頁
Activity生命周期_第4頁
Activity生命周期_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Activity:Activity是Android程序與用戶交互的窗口,是Android構造塊中最基本的一種,它需要為保持各界面的狀態,做很多持久化的事情,妥善管理生命周期以及一些跳轉邏輯。 service:后臺服務于Activity,封裝有一個完整的功能邏輯實現,接受上層指令,完成相關的事務,定義好需要接受的Intent提供同步和異步的接口。 Content Provider:是Android提供的第三方應用數據的訪問方案,可以派生Content Provider類,對外提供數據,可以像數據庫一樣進行選擇排序,屏蔽內部數據的存儲細節,向外提供統一的接口模型,大大簡化上層應用,對數據的整合提

2、供了更方便的途徑。 BroadCast Receiver:接受一種或者多種Intent作觸發事件,接受相關消息,做一些簡單處理,轉換成一條Notification,統一了Android的事件廣播模型。Intent(意圖)主要是解決Android應用的各項組件之間的通訊。Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,并完成組件的調用。因此,Intent在這里起著一個媒體中介的作用,專門提供組件互相調用的相關信息,實現調用者與被調用者之間的解耦。顯式意圖:調用Intent.se

3、tComponent()或Intent.setClass()方法明確指定了組件名的Intent為顯式意圖,顯式意圖明確指定了Intent應該傳遞給哪個組件。隱式意圖:沒有明確指定組件名的Intent為隱式意圖。 Android系統會根據隱式意圖中設置的動作(action)、類別(category)、數據(URI和數據類型)找到最合適的組件來處理這個意圖。顯示意圖非常常用也非常簡單一般用于應用程序內之間Activity的相互調用轉換,就不多說了,這里我介紹一下隱式意圖:簡單概括就是: 意圖包括:Action(動作),Category(附加信息),Data(數據,具體內容),Tpye(類型)等等,

4、舉個例子,說白了意圖就是啟動一個 組件的的完整的動作信息,就像打人,打就是Action動作,人就是Data內容,而Type就是類型,打什么人呢?打壞人,type就是壞指的類型,只 有這些信息全了才能執行一個完整的意圖,當然還有一些信息,比如scheme就是URI類型的數據的前綴,就像這個例子當中的sms:,還有host主機 名,path路徑等。Activty的生命周期的也就是它所在進程的生命周期。 一個Activity的啟動順序:onCreate()>onStart()>onResume()當另一個Activity啟動時:第一個Activity onPause()>

5、第二個Activity    onCreate()>onStart()>onResume() >第一個Activity   onStop()當返回到第一個Activity時:第二個Activity onPause() > 第一個ActivityonRestart()>onStart()>onResume() >第二個Activity   onStop()>onDestroy()一個Activity的銷毀順序:(情況一)onPause()&

6、gt;<Process Killed> (情況二)onPause()>onStop()><Process Killed> (情況三)onPause()>onStop()>onDestroy()每一個活動( Activity )都處于某一個狀態,對于開發者來說,是無法控制其應用程序處于某一個狀態的,這些均由系統來完成。但是當一個活動的狀態發生改變的時候,開發者可以通過調用 onXX() 的方法獲取到相關的通知信息。在實現 Activity 類的時候,通過覆蓋( override )這些方法即可在你需要處理的時候來調用。 

7、;        一、 onCreate :當活動第一次啟動的時候,觸發該方法,可以在此時完成活動的初始化工作。 onCreate 方法有一個參數,該參數可以為空( null ),也可以是之前調用 onSaveInstanceState ()方法保存的狀態信息。        二、  onStart :該方法的觸發表示所屬活動將被展現給用戶 這一步變成用戶可見不可交互 的。      &

8、#160; 三、  onResume :當一個活動和用戶發生交互的時候,觸發該方法。       四、  onPause :當一個正在前臺運行的活動因為其他的活動需要前臺運行而轉入后臺運行的時候,觸發該方法。這時候需要將活動的狀態持久化,比如正在編輯的數據庫記錄等。你的程序的優先級降低,有可能被系統收回        五、  onStop : 當一個活動不再需要展示給用戶的時候,觸發該方

9、法。如果內存緊張,系統會直接結束這個活動,而不會觸發 onStop 方法。 所以保存狀態信息是應該在onPause時做,而不是onStop時做。活動如果沒有在前臺運行,都將被停止或者Linux管理進程為了給新的活動預留足 夠的存儲空間而隨時結束這些活動。因此對于開發者來說,在設計應用程序的時候,必須時刻牢記這一原則。在一些情況下,onPause方法或許是活動觸發的 最后的方法,因此開發者需要在這個時候保存需要保存的信息。        六、onRestart :當處于停止狀態的活動需要再次展現給用戶的時候,觸發該方法。

10、60;       七、 onDestroy :當活動銷毀的時候,觸發該方法。和 onStop 方法一樣,如果內存緊張,系統會直接結束這個活動而不會觸發該方法。·        onSaveInstanceState :系統調用該方法,允許活動保存之前的狀態,比如說在一串字符串中的光標所處的位置等。 通常情況下,開發者不需要重寫覆蓋該方法,在默認的實現中,已經提供了自動保存活動所涉及到的用戶界面組件的所有狀態信息。Activity狀態一般認為Activit

11、y有以下四種狀態:活動的:當一個Activity在棧頂,它是可視的、有焦點、可接受用戶輸入的。Android試圖盡最大可能保持它活動狀態,殺死其它Activity來確保當前活動Activity有足夠的資源可使用。當另外一個Activity被激活,這個將會被暫停。暫停:在很多情況下,你的Activity可視但是它沒有焦點,換句話說它被暫停了。有可能原因是一個透明或者非全屏的Activity被激活。當被暫停,一個Activity仍會當成活動狀態,只不過是不可以接受用戶輸入。在極特殊的情況下,Android將會殺死一個暫停的Activity來為活動的Activity提供充足的資源。當一個Activi

12、ty變為完全隱藏,它將會變成停止。停止:當一個Activity不是可視的,它“停止”了。這個Activity將仍然在內存中保存它所有的狀態和會員信息。盡管如此,當其它地方需要 內存時,它將是最有可能被釋放資源的。當一個Activity停止后,一個很重要的步驟是要保存數據和當前UI狀態。一旦一個Activity退出或關閉 了,它將變為待用狀態。待用: 在一個Activity被殺死后和被裝在前,它是待用狀態的。待用Acitivity被移除Activity棧,并且需要在顯示和可用之前重新啟動它。activity的四種加載模式在android的多activity開發中,activity之間的跳轉可能需

13、要有多種方式,有時是普通的生成一個新實例,有時希望跳轉到原來某個 activity實例,而不是生成大量的重復的activity。加載模式便是決定以哪種方式啟動一個跳轉到原來某個Activity實例。在android里,有4種activity的啟動模式,分別為:·standard: 標準模式,一調用startActivity()方法就會產生一個新的實例。- 來了intent,每次都創建新的實例。·singleTop: 如果已經有一個實例位于Activity棧的頂部時,就不產生新的實例,而只是調用Activity中的newInstance()方法。如果不位于棧頂,會產生一個新的

14、實例。- 來了intent, 每次都創建新的實例,僅一個例外:當棧頂的activity 恰恰就是該activity的實例(即需要創建的實例)時,不再創建新實例。這解決了棧頂復用問題,想一想,你按兩次back鍵,退出的都是同一個activity,這感覺肯定不爽。·singleTask: - 來了intent后,檢查棧中是否存在該activity的實例,如果存在就把intent發送給它,否則就創建一個新的該activity的實例,放入 一個新的task棧的棧底。肯定位于一個task的棧底,而且棧中只能有它一個該activity實例,但允許其他activity加入該棧。解決了在一 個tas

15、k中共享一個activity。·singleInstance: 這個跟singleTask基本上是一樣,只有一個區別:在這個模式下的Activity實例所處的task中,只能有這個activity實例,不能有其他的實例。- 肯定位于一個task的棧底, 并且是該棧唯一的activity。解決了多個task共享一個activity。activity啟動方式:兩種當調用startActivityForResult時通過onActivityResult(int requestCode, int resultCode, Intent data)處理返回的數據requestCode:調用sta

16、rtActivityForResult(Intent intent, int requestCode)時傳遞過去的請求碼。resultCode:被調用的Activity執行setResult(int resultCode, Intent intent)時傳遞的結果碼,一般有RESULT_CANCELED,RESULT_OK等,用于區分被調用的Activity傳回的不同結果data:被調用的Activity傳回來的數據,可以用data.getExtras()得到數據,用Bundle類型的變量來接收,調用get(String key)來獲取對應的值back鍵默認行為是finish處于前臺的Acti

17、vity的,即Activity的狀態為Destroy狀態為止,再次啟動該Activity是從onCreate開始的(不會調用onSaveInstanceState()方法)。Home鍵默認是stop前臺的Activity即狀態為onStop為止,而不是Destroy,若再次啟動它,會調用onSaveInstanceState() 方法,保持上次Activity的狀態則是從OnRestart開始的->onStart()->onResume()。IntentFilter中的<action android:name=”ent.action.MAIN”/>和<category android:name=”ent.category.LAUNCH

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論