Activity生命周期_第1頁
Activity生命周期_第2頁
Activity生命周期_第3頁
Activity生命周期_第4頁
Activity生命周期_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

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

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

8、#160; 三、  onResume :當(dāng)一個(gè)活動(dòng)和用戶發(fā)生交互的時(shí)候,觸發(fā)該方法。       四、  onPause :當(dāng)一個(gè)正在前臺(tái)運(yùn)行的活動(dòng)因?yàn)槠渌幕顒?dòng)需要前臺(tái)運(yùn)行而轉(zhuǎn)入后臺(tái)運(yùn)行的時(shí)候,觸發(fā)該方法。這時(shí)候需要將活動(dòng)的狀態(tài)持久化,比如正在編輯的數(shù)據(jù)庫記錄等。你的程序的優(yōu)先級(jí)降低,有可能被系統(tǒng)收回        五、  onStop : 當(dāng)一個(gè)活動(dòng)不再需要展示給用戶的時(shí)候,觸發(fā)該方

9、法。如果內(nèi)存緊張,系統(tǒng)會(huì)直接結(jié)束這個(gè)活動(dòng),而不會(huì)觸發(fā) onStop 方法。 所以保存狀態(tài)信息是應(yīng)該在onPause時(shí)做,而不是onStop時(shí)做。活動(dòng)如果沒有在前臺(tái)運(yùn)行,都將被停止或者Linux管理進(jìn)程為了給新的活動(dòng)預(yù)留足 夠的存儲(chǔ)空間而隨時(shí)結(jié)束這些活動(dòng)。因此對(duì)于開發(fā)者來說,在設(shè)計(jì)應(yīng)用程序的時(shí)候,必須時(shí)刻牢記這一原則。在一些情況下,onPause方法或許是活動(dòng)觸發(fā)的 最后的方法,因此開發(fā)者需要在這個(gè)時(shí)候保存需要保存的信息。        六、onRestart :當(dāng)處于停止?fàn)顟B(tài)的活動(dòng)需要再次展現(xiàn)給用戶的時(shí)候,觸發(fā)該方法。

10、60;       七、 onDestroy :當(dāng)活動(dòng)銷毀的時(shí)候,觸發(fā)該方法。和 onStop 方法一樣,如果內(nèi)存緊張,系統(tǒng)會(huì)直接結(jié)束這個(gè)活動(dòng)而不會(huì)觸發(fā)該方法。·        onSaveInstanceState :系統(tǒng)調(diào)用該方法,允許活動(dòng)保存之前的狀態(tài),比如說在一串字符串中的光標(biāo)所處的位置等。 通常情況下,開發(fā)者不需要重寫覆蓋該方法,在默認(rèn)的實(shí)現(xiàn)中,已經(jīng)提供了自動(dòng)保存活動(dòng)所涉及到的用戶界面組件的所有狀態(tài)信息。Activity狀態(tài)一般認(rèn)為Activit

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

12、ty變?yōu)橥耆[藏,它將會(huì)變成停止。停止:當(dāng)一個(gè)Activity不是可視的,它“停止”了。這個(gè)Activity將仍然在內(nèi)存中保存它所有的狀態(tài)和會(huì)員信息。盡管如此,當(dāng)其它地方需要 內(nèi)存時(shí),它將是最有可能被釋放資源的。當(dāng)一個(gè)Activity停止后,一個(gè)很重要的步驟是要保存數(shù)據(jù)和當(dāng)前UI狀態(tài)。一旦一個(gè)Activity退出或關(guān)閉 了,它將變?yōu)榇脿顟B(tài)。待用: 在一個(gè)Activity被殺死后和被裝在前,它是待用狀態(tài)的。待用Acitivity被移除Activity棧,并且需要在顯示和可用之前重新啟動(dòng)它。activity的四種加載模式在android的多activity開發(fā)中,activity之間的跳轉(zhuǎn)可能需

13、要有多種方式,有時(shí)是普通的生成一個(gè)新實(shí)例,有時(shí)希望跳轉(zhuǎn)到原來某個(gè) activity實(shí)例,而不是生成大量的重復(fù)的activity。加載模式便是決定以哪種方式啟動(dòng)一個(gè)跳轉(zhuǎn)到原來某個(gè)Activity實(shí)例。在android里,有4種activity的啟動(dòng)模式,分別為:·standard: 標(biāo)準(zhǔn)模式,一調(diào)用startActivity()方法就會(huì)產(chǎn)生一個(gè)新的實(shí)例。- 來了intent,每次都創(chuàng)建新的實(shí)例。·singleTop: 如果已經(jīng)有一個(gè)實(shí)例位于Activity棧的頂部時(shí),就不產(chǎn)生新的實(shí)例,而只是調(diào)用Activity中的newInstance()方法。如果不位于棧頂,會(huì)產(chǎn)生一個(gè)新的

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

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

16、rtActivityForResult(Intent intent, int requestCode)時(shí)傳遞過去的請(qǐng)求碼。resultCode:被調(diào)用的Activity執(zhí)行setResult(int resultCode, Intent intent)時(shí)傳遞的結(jié)果碼,一般有RESULT_CANCELED,RESULT_OK等,用于區(qū)分被調(diào)用的Activity傳回的不同結(jié)果data:被調(diào)用的Activity傳回來的數(shù)據(jù),可以用data.getExtras()得到數(shù)據(jù),用Bundle類型的變量來接收,調(diào)用get(String key)來獲取對(duì)應(yīng)的值back鍵默認(rèn)行為是finish處于前臺(tái)的Acti

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論