版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Android程序開(kāi)發(fā)應(yīng)用實(shí)例
第五講AndoridActivity組件
12內(nèi)容概要
Activity生命周期Activity棧管理機(jī)制
解析Activity的實(shí)現(xiàn)Activity的消息傳遞Activity應(yīng)用總結(jié)23本節(jié)內(nèi)容什么是AndroidActivity生命周期
3Activity生命周期特征一個(gè)完整Activity的生命周期包括激活狀態(tài)、運(yùn)行狀態(tài)、暫停狀態(tài)、停止?fàn)顟B(tài)和終止?fàn)顟B(tài)。這些狀態(tài)的特征為:激活狀態(tài):Activity的初始狀態(tài),所有的Activity必須經(jīng)歷這個(gè)狀態(tài)運(yùn)行狀態(tài):這時(shí)的Activity運(yùn)行在屏幕的前臺(tái)暫停狀態(tài):這時(shí)Activity失去了焦點(diǎn)但是仍然對(duì)用戶可見(jiàn)。停止?fàn)顟B(tài):這時(shí)Activity對(duì)用戶不可見(jiàn),所以其窗口會(huì)被其他Activity覆蓋。終止?fàn)顟B(tài):這時(shí)Activity將會(huì)被系統(tǒng)清理出內(nèi)存4Activity生命周期狀態(tài)轉(zhuǎn)換Activity的生命周期狀態(tài)轉(zhuǎn)換如以下圖所示:5Activity生命周期劃分Activity的生命周期可以根據(jù)不同的標(biāo)準(zhǔn)分為:完整生命周期onCreate()
onDestroy()可見(jiàn)生命周期onStart()
onStop()前臺(tái)生命周期onResume()
onPause()67本節(jié)內(nèi)容什么是AndroidActivity棧管理機(jī)制
7Android管理Activity
大多數(shù)的應(yīng)用程序根據(jù)功能的需要都是由多個(gè)屏幕顯示組成,因此大局部的Android應(yīng)用中也就必須包含多個(gè)Activity類(lèi)。Android系統(tǒng)使用棧來(lái)管理Activity。棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),處于頂端的元素總是被先處理。當(dāng)一個(gè)新的Activity啟動(dòng)的時(shí)候,它首先會(huì)被放置在Activity棧頂部并成為運(yùn)行狀態(tài)的Activity只有當(dāng)這個(gè)新的Activity退出以后,之前Activity才能重新回到前臺(tái)界面。8Activity棧管理過(guò)程〔續(xù)〕當(dāng)前有Activity_A、Activity_B和Activity_C三個(gè)Activity。Activity_A是當(dāng)前響應(yīng)用戶的操作的Activity,因此處于運(yùn)行狀態(tài)的Activity_A被放置于棧頂,而Activity_B和Activity_C處于暫停狀態(tài)。9Activity棧管理過(guò)程〔續(xù)〕當(dāng)Activity_A對(duì)應(yīng)的窗口被關(guān)閉時(shí),Activity_B由暫停狀態(tài)轉(zhuǎn)成運(yùn)行狀態(tài),這時(shí)處于運(yùn)行狀態(tài)的Activity_B被置于棧頂。10Activity棧管理過(guò)程當(dāng)接著當(dāng)Activity_B對(duì)應(yīng)的窗口被關(guān)閉時(shí),Activity_C由暫停狀態(tài)轉(zhuǎn)成運(yùn)行狀態(tài),這時(shí)處于運(yùn)行狀態(tài)的Activity_C被置于棧頂。1112本節(jié)內(nèi)容什么是Android解析Activity的實(shí)現(xiàn)12Activity類(lèi)中的方法android.app.Activity類(lèi)提供的方法protected
void
onCreate(Bundle
icicle);protected
void
onStart();
protected
void
onRestart();
protected
void
onResume();
protected
void
onFreeze(Bundle
outIcicle)
protected
void
onPause();
protected
void
onStop();
protected
void
onDestroy();13創(chuàng)立Activity程序開(kāi)發(fā)人員可以重寫(xiě)android.app.Activity類(lèi)的方法從而使自定義的Activity在狀態(tài)改變時(shí)執(zhí)行用戶所期望的操作。下面創(chuàng)立一個(gè)名稱為HelloActivity的單Activity的Android應(yīng)用。14創(chuàng)立Activity的缺省代碼工程創(chuàng)立完成后,該類(lèi)中的缺省代碼如下所示:publicclassMainActivityextendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){getMenuInflater().inflate(R.menu.activity_main,menu);returntrue;}}15啟動(dòng)另外一個(gè)Activity一個(gè)Activity可以啟動(dòng)另外一個(gè)Activity,Activity之間是通過(guò)Intent來(lái)傳遞消息的。舉個(gè)例子說(shuō):假設(shè)你想讓用戶看到Internet上的某個(gè)圖片。當(dāng)前有一個(gè)Activity具有翻開(kāi)Internet上的某個(gè)圖片的功能,那么“宿主Activity〞只需將請(qǐng)求信息放到一個(gè)Intent對(duì)象里面,并把它傳遞給startActivity()或startActivityForResult()然后瀏覽器就會(huì)顯示指定link的圖片。而當(dāng)用戶按下BACK鍵的時(shí)候,宿主Activity又會(huì)再一次的顯示在屏幕上。16啟動(dòng)Activity方式一個(gè)Activity可以啟動(dòng)另外一個(gè)Activity,在這里啟動(dòng)的Activity被稱為〞宿主Activity〞,被啟動(dòng)的Activity被稱為“隨從Activity〞。有三種方式來(lái)啟動(dòng)另外一個(gè)Activity:?jiǎn)?dòng)同一個(gè)Application的Activity啟動(dòng)不同Application的Activity啟動(dòng)不同apk下的Activity17啟動(dòng)不同的Application下的Activity實(shí)例5-1啟動(dòng)不同Application的Activity18啟動(dòng)不同APK下的Activity這種方式〔啟動(dòng)不同APK下的Activity〕一般用來(lái)啟動(dòng)Android系統(tǒng)提供的Activity。實(shí)例5-2啟動(dòng)一個(gè)Android系統(tǒng)提供的“瀏覽網(wǎng)頁(yè)〞ActivitypublicclassMainActivityextendsActivity{publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Uriuri=Uri.parse("://baidu");Intentintent=newIntent(Intent.ACTION_VIEW,uri);startActivity(intent);}}19Activity啟動(dòng)模式Android支持standard、singleTop、singleTask和singleInstance四種啟動(dòng)模式??梢酝ㄟ^(guò)AndroidManifest.xml文件中的<activity>元素的launchMode屬性來(lái)配置Activity的啟動(dòng)模式。例如下面的語(yǔ)句指定“ActivityMain“這個(gè)Activity的啟動(dòng)模式為singleTask:<activityandroid:name="ActivityMain"android:launchMode="singleTask"></activity>20設(shè)置Activity許可同API一樣,Android系統(tǒng)開(kāi)放了許多的底層應(yīng)用〔如ACTION_CALL〕供用戶調(diào)用。Android系統(tǒng)會(huì)在運(yùn)行時(shí)檢查該用戶程序是否有權(quán)限調(diào)用該底層應(yīng)用,這時(shí)需要設(shè)置Activity許可才能運(yùn)行相應(yīng)的應(yīng)用。需要通過(guò)清單文件設(shè)置Activity的許可,否那么程序運(yùn)行出現(xiàn)錯(cuò)誤。例如:<uses-permissionandroid:name="android.permission.CALL_PHONE"></uses-permission>2122本節(jié)內(nèi)容什么是AndroidActivity的消息傳遞22Activity間的消息傳遞Android使用Intent〔意圖〕在不同的Activity之間傳遞消息。Intent對(duì)象描述了應(yīng)用中一次操作的動(dòng)作、數(shù)據(jù)和附加數(shù)據(jù),系統(tǒng)通過(guò)該對(duì)象的描述調(diào)用對(duì)應(yīng)的應(yīng)用。Intent提供了多個(gè)Activity之間進(jìn)行交互的方式,應(yīng)用程序可通過(guò)startActivity方法指定相應(yīng)的Intent對(duì)象來(lái)啟動(dòng)另外一個(gè)Activity。23
Bundle
如果要傳遞自定義的數(shù)據(jù)時(shí)例如將當(dāng)前Activity的運(yùn)行狀態(tài)傳遞給下一個(gè)Activity,可使用Bundle來(lái)協(xié)助完成。Bundle對(duì)象可被理解成一個(gè)哈希表,該映射表建立了關(guān)鍵字〔標(biāo)識(shí)〕與其值〔傳遞的數(shù)據(jù)〕的映射關(guān)系通過(guò)Bundle類(lèi)的putXXX(Key,Value)方法將數(shù)據(jù)封裝到Bundle對(duì)象中,如putString(Stringkey,Stringvalue)。通過(guò)Bundle的getXXX(Stringkey)方法取得關(guān)鍵字對(duì)應(yīng)的數(shù)據(jù)。24
使用Intent和Bundle在Activity間傳遞數(shù)據(jù)
“宿主Activity“端的流程1〕首先創(chuàng)立一個(gè)Intent和Bundle對(duì)象,其中Bundle用于存儲(chǔ)傳遞的數(shù)據(jù); 2〕然后使用Bundle的put方法輸入要傳遞的數(shù)據(jù); 3〕將要傳遞的數(shù)據(jù)壓入Intent中; 4〕啟動(dòng)“隨從Activity“?!半S從Activity“端的流程1〕接收“宿主Activity“的Intent;2)傳遞獲得傳入的Bundle對(duì)象;3)使用Bundle的get方法獲取要傳遞的數(shù)據(jù)。2526本節(jié)內(nèi)容什么是AndroidActivity應(yīng)用26
Activity應(yīng)用〔續(xù)〕
【實(shí)例5-4】實(shí)現(xiàn)Activities間的消息傳遞。該實(shí)例包含了兩個(gè)Activity:MainActivityMainActivity通過(guò)Bundle綁定單項(xiàng)選擇按鈕值將當(dāng)前被選中的單項(xiàng)選擇按鈕值傳送給SupplActivity。 myintent.putExtras(mybundle); /*將數(shù)據(jù)封裝到Intent對(duì)象中,通過(guò)該Intent對(duì)象將數(shù)據(jù)傳送給相應(yīng)的Activity*/ MainActivity.this.startActivity(myintent);27
Activity應(yīng)用〔續(xù)〕
SMainActivity啟動(dòng)SupplActivity,并傳遞給SupplActivity包含RadioButton值的Intent對(duì)象,接著SupplActivity通過(guò)getIntent方法獲取從MainActivity傳過(guò)來(lái)Intentmyintent=this.getIntent();//獲取Activity傳遞的IntentBundlemybundle=myintent.getExtras();//獲取Intent的Bundle對(duì)象,該對(duì)象記錄了傳送的數(shù)據(jù)值
}28
Activity應(yīng)用
該程序,選中“Chinese〞單項(xiàng)選擇按鈕,然后點(diǎn)擊“StartSupplActivity〞按鈕〔左圖所示〕。之后,會(huì)看到SupplActivity被啟動(dòng),
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房產(chǎn)二次銷(xiāo)售協(xié)議文本2024
- 統(tǒng)編版語(yǔ)文三年級(jí)上冊(cè)-習(xí)作:我來(lái)編童話-教學(xué)課件多篇
- 軍訓(xùn)個(gè)人總結(jié)表
- 高中化學(xué) 專題2 專題復(fù)習(xí)課教案 蘇教版選修3
- 內(nèi)控評(píng)價(jià)整改報(bào)告范文
- 關(guān)于青少年近視研究報(bào)告500字
- 關(guān)于稅務(wù)變更財(cái)務(wù)負(fù)責(zé)人委托書(shū)
- 導(dǎo)購(gòu)員崗位2024年度勞動(dòng)協(xié)議
- 齊魯工業(yè)大學(xué)《保險(xiǎn)精算》2022-2023學(xué)年第一學(xué)期期末試卷
- 齊魯工業(yè)大學(xué)《MATLAB仿真技術(shù)》2021-2022學(xué)年期末試卷
- 2024-2030年中國(guó)拍賣(mài)行業(yè)市場(chǎng)深度調(diào)研及競(jìng)爭(zhēng)格局與投資研究報(bào)告
- 2024秋人教版一年級(jí)數(shù)學(xué)上冊(cè)《11-20的認(rèn)識(shí)》教學(xué)設(shè)計(jì)
- 油漆作業(yè)風(fēng)險(xiǎn)和隱患辨識(shí)、評(píng)估分級(jí)與控制措施一覽表
- 空氣栓塞培訓(xùn)課件
- 數(shù)據(jù)治理與數(shù)據(jù)中臺(tái)建設(shè)方案
- HG∕T 5248-2017 風(fēng)力發(fā)電機(jī)組葉片用環(huán)氧結(jié)構(gòu)膠粘劑
- 醫(yī)院感染監(jiān)測(cè)標(biāo)準(zhǔn)考試試題附有答案
- 高血壓病三級(jí)預(yù)防策略 醫(yī)學(xué)類(lèi)模板 醫(yī)學(xué)課件
- DL∕T 523-2017 化學(xué)清洗緩蝕劑應(yīng)用性能評(píng)價(jià)指標(biāo)及試驗(yàn)方法
- 食品營(yíng)養(yǎng)學(xué)選擇試題庫(kù)(附參考答案)
- 北師大版二年級(jí)數(shù)學(xué)上冊(cè)第五單元《2~5的乘法口訣》(大單元教學(xué)設(shè)計(jì))
評(píng)論
0/150
提交評(píng)論