版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Android 移動應(yīng)用設(shè)計與開發(fā),第4章 Activity 以及Intent通信機制,4.1 Activity 生命周期 4.1.1 Activity 交互機制 4.1.2 Activity 狀態(tài) 4.1.3 Activity 生命周期的事件回調(diào)方法4.2 Intent 4.2.1 Intent 屬性 4.2.2 Intent 解析 4.2.3 Activity的跳轉(zhuǎn),?本章導(dǎo)讀,4.1 Acti
2、vity 生命周期,在Android應(yīng)用程序中,所有的Android組件都有它自己的生命周期,表示從這一組件的創(chuàng)建到銷毀的整個過程。在這一過程中,組件會在活動、非活動以及可見或不可見等狀態(tài)中不斷因應(yīng)用場景的改變而進行切換。這一小節(jié)中,我們將對Android系統(tǒng)中Activity組件的生命周期進行詳細的介紹,4.1.1 Activity 交互機制,Android針對Activity的管理使用的是棧機制,Activity棧保存了已經(jīng)啟動并且
3、沒有終止的Activity,并遵循“先進后出”的原則具體說明:在某個時刻只有一個Activity處在棧頂,當這個Activity被銷毀后,下面的Activity才可能處于棧頂,或者是有一個新的Activity被創(chuàng)建出來,則上一個Activity就被壓棧下去Android按照一種層次管理所有的Activity,因為Activity是直接涉及到與用戶交互界面的處理,而任意時刻與用戶交互的界面只有一個,所以Android針對Activ
4、ity的管理采用了具有層次感的棧的數(shù)據(jù)結(jié)構(gòu),4.1.2 Activity 狀態(tài),,Active /running,,此時Activity一定處于屏幕的最前端,用戶完全可以看得到,并且可以與用戶進行交互。對于Activity棧來說,它處于棧頂,,Paused,,Activity在屏幕上仍然可見,但是它已經(jīng)失去了焦點,用戶不能與之進行交互。暫停狀態(tài)的Activity是存活的,它維持著其內(nèi)部狀態(tài)和信息,但是系統(tǒng)可能會在手機內(nèi)存極低的情
5、況下殺掉該Activity,,Stop,,Activity在屏幕上完全不能被用戶看見,這個Activity已經(jīng)完全被其他Activity所遮住。系統(tǒng)仍然保留有其內(nèi)部狀態(tài)和成員信息,但是它經(jīng)常會由于手機系統(tǒng)內(nèi)存被征用而被系統(tǒng)殺死回收,,Killed,,Activity被系統(tǒng)殺死回收或者未啟動,4.1.2 Activity 狀態(tài),四種狀態(tài)的轉(zhuǎn)換關(guān)系如圖4.1所示:,圖4.1 Activity的4種狀態(tài)之間的轉(zhuǎn)換圖,Activity啟動后處于
6、Active/Running 狀態(tài),此時Activity處于屏幕的最上面當用戶啟動了新的Activity,并且此Activity部分遮擋了當前的Activity或擁有透明屬性時,則當前的Activity轉(zhuǎn)換為Paused狀態(tài),也可以從Paused狀態(tài)到Active/Running狀態(tài)當用戶啟動的Activity完全遮住了當前的Activity時,則當前的Activity轉(zhuǎn)換為Stop狀態(tài)處于Stop狀態(tài)的Activity
7、,當手機系統(tǒng)內(nèi)存被其他應(yīng)用程序征用時,Stop狀態(tài)的Activity將首先被殺死,進入Killed狀態(tài)。Active/Running狀態(tài)的Activity被用戶終止或是Paused狀態(tài)及Stop狀態(tài)的Activity被系統(tǒng)終止后,Activity進入了Killed狀態(tài),,4.1.3 Activity生命周期的事件回調(diào)方法,4.1.3 Activity生命周期的事件回調(diào)方法 —事件回調(diào)方
8、法種類,Android生命周期的事件回調(diào)方法如下:,void onCreate(Bundle savedInstanceState)void onStart()void onRestart()void onResume()void onPause()void onStop()void onDestroy(),注意:(1)所有的Activiy都必須實現(xiàn)onCreate()方法,在該方法中可以對Activity進行一些初始化設(shè)
9、置。(2)所有的Activity生命周期方法的實現(xiàn)都必須先調(diào)用其父類的方法。,4.1.3 Activity生命周期的事件回調(diào)方法 —Android生命周期分類,,,全生命周期,,,可視生命周期,,,前臺生命周期,全生命周期自第一次調(diào)用onCreate()開始,直至調(diào)用onDestroy()為止Activity在onCreate()中設(shè)置所有“全局”狀態(tài)以完成初始化在onDestro
10、y()中釋放所有系統(tǒng)資源,可視生命周期onStart() 開始到onStop()結(jié)束在此期間,用戶可以在屏幕上看到該Activity在這兩個方法中,你可以管理該Activity的資源可以在onStart()中注冊一個BroadcastReceiver來監(jiān)控UI變化,而在onStop()中取消該注冊,前臺生命周期自onResume()調(diào)用開始,至相應(yīng)的onPause()調(diào)用為止在此期間,Activity位于前臺最上面,
11、可與用戶進行交互當設(shè)備轉(zhuǎn)入休眠狀態(tài)或有新的Activity啟動時,將調(diào)用onPause() 方法當Activity接收到新的Intent的時候會調(diào)用onResume()方法,4.1.3 Activity生命周期的事件回調(diào)方法 —Activity生命周期過程及狀態(tài)改變,,,說明:(1)橢圓是Activity可以經(jīng)歷的主要狀態(tài)(2)矩形框代表了當Activity在狀態(tài)間發(fā)生改變的時候,我
12、們進行操作所要實現(xiàn)的回調(diào)方法。,4.1.3 Activity生命周期的事件回調(diào)方法 —Activity生命周期過程及狀態(tài)改變,4.1.3 Activity生命周期的事件回調(diào)方法 —Activity生命周期過程及狀態(tài)改變,4.1.3 Activity生命周期的事件回調(diào)方法 —Activity生命周期過程及
13、狀態(tài)改變,注意:與前面所講的7種方法不同,onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,它們并不是總會被調(diào)用。,4.1.3 Activity生命周期的事件回調(diào)方法 —實例,,,package com.androidbook.activitylife;import android.app.Activity;import an
14、droid.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button; public class Activity1 extends Activity {
15、/** Called when the activity is first created. */private static final String TAG = "Activity1";//一個完整生命周期開始時被調(diào)用,初始化Activity@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(save
16、dInstanceState);setContentView(R.layout.main);Log.e(TAG,"onCreate");Button button = (Button)findViewById(R.id.button);button.setText("進入Activity2");Button otherButton =,(Button)findViewById(R.id.
17、otherbutton);otherButton.setText("進入Activity3,彈出對話框");button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//TODO Auto-generated method stubIntent intent = new Intent( Ac
18、tivity1.this, Activity2.class);startActivity(intent);}});otherButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent( A
19、ctivity1.this,Activity3.class);startActivity(intent);}});},4.1.3 Activity生命周期的事件回調(diào)方法 —實例,,,// 可視生命周期開始時被調(diào)用@Overrideprotected void onStart() { // TODO Auto-generated method stubsuper.onStar
20、t();Log.e(TAG,"onStart");} //在onStart()后被調(diào)用,用于恢復(fù)UI信息@Override protected void onRestoreInstanceState(Bundle savedInstanceState) {// TODO Auto-generated method stub//從savedInstanceState恢復(fù)UI狀態(tài);//Bun
21、dle對象同樣在onCreate方法中被傳入。super.onRestoreInstanceState(savedInstanceState);Log.e(TAG,"onRestoreInstanceState");}@Override protected void onResume() { // TODO Auto-generated method stub //在前臺生命周期開
22、始時被調(diào)用,恢復(fù)被onPause()停止的用于界面更新的資源,super.onResume();Log.e(TAG,"onResume");} //在onResume()之后被調(diào)用,用于保存界面信息@Overrideprotected void onSaveInstanceState(Bundle savedInstanceState) {// TODO Auto-generated metho
23、d stub//保存UI狀態(tài)變化到savedInstanceState中。//當進程被殺死或重啟時這個Bundle會傳入到onCreate方法。super.onSaveInstanceState(savedInstanceState);Log.e(TAG,"onSaveInstanceState");}//重新進入可視界面前被調(diào)用,這個Activity已經(jīng)出現(xiàn)過@Override protected
24、void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Log.e(TAG,"onRestart");}//在前臺生命周期結(jié)束時被調(diào)用,用來保存持久的數(shù)據(jù)或釋放占用的資源,4.1.3 Activity生命周期的事件回調(diào)方法 —實例,,,@Override protected v
25、oid onPause() {// TODO Auto-generated method stubsuper.onPause();Log.e(TAG,"onPause");}//在可視生命周期結(jié)束時被調(diào)用,保存數(shù)據(jù)和狀態(tài)變化@Override protected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.
26、e(TAG,"onStop");}//在整個生命周期結(jié)束時被調(diào)用,清除任何資源,包括結(jié)束線程、關(guān)閉數(shù)據(jù)庫連接等。@Override protected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.e(TAG,"onDestroy");}},4.1.3 Activity生命周期的
27、事件回調(diào)方法 —實例,,實例情況分析:,4.1.3 Activity生命周期的事件回調(diào)方法 —實例,,(1)一個Activity(Activity1) 啟動Activity1,下圖為用戶看到的界面:,4.1.3 Activity生命周期的事件回調(diào)方法 —實例,,(1)一個Activity(Ac
28、tivity1)Activity1的操作詳情如下所示:,4.1.3 Activity生命周期的事件回調(diào)方法 —實例,,(2)兩個Activity(Activity1和Activity2)由Activity1->Activity2,Activity2完全覆蓋Activity1,下圖為用戶看到的界面:,4.1.3 Activity生命周期的事件回調(diào)方法
29、 —實例,,(2)兩個Activity(Activity1和Activity2)Activity1和Activity2的操作詳情如下所示:,4.1.3 Activity生命周期的事件回調(diào)方法 —實例,,(3)兩個Activity(Activity1和Activity3)Activity1?Activity3,此時的Activity3并不完全覆蓋Activity1,也就是前面所
30、說的暫停狀態(tài),這時的Activity3是以對話框的形式出現(xiàn)的。如下圖所示:,4.1.3 Activity生命周期的事件回調(diào)方法 —實例,,(3)兩個Activity(Activity1和Activity3)Activity1和Activity3的操作詳情如下所示:,4.2 Intent,Intent是一個動作的完整描述,包含了產(chǎn)生組件、接收組件和傳遞數(shù)據(jù)信息。并且,Intent利用消息實現(xiàn)
31、應(yīng)用程序之間的交互機制,這種消息描述了應(yīng)用中一次操作的動作、數(shù)據(jù)以及附加數(shù)據(jù),系統(tǒng)通過該Intent的描述負責找到對應(yīng)的組件,并將Intent傳遞給調(diào)用的組件,完成組件的調(diào)用,4.2.1 Intent屬性,Intent由動作、數(shù)據(jù)、分類、類型、組件和擴展信息等內(nèi)容組成,每個組成都由相應(yīng)的屬性進行表示,并提供設(shè)置和獲取相應(yīng)屬性的方法,,4.2.1 Intent屬性,(1)ActionAction屬性用于描述Intent要完成的動作,對
32、要執(zhí)行的動作進行一個簡要描述,Action屬性常量如下表所示:,,4.2.1 Intent屬性,(2)DataData屬性是執(zhí)行動作的URI和MIME類型,Data屬性常量如下表所示,,4.2.1 Intent屬性,(3)Action和Data匹配使用不同的Action由不同的Data數(shù)據(jù)指定,見下表所示:,,4.2.1 Intent屬性,(4)CategoryCategory屬性指明一個執(zhí)行Action的分類,Intent中定義
33、了一系列Category屬性常量,如下表所示:,,4.2.1 Intent屬性,(5)Component,,Component屬性用于指明Intent目標組件的類名稱如果沒有指定了Component這個屬性,通常Android會根據(jù)Intent中包含的其他屬性的信息,比如Action、Data/Type、Category進行查找,最終找到一個與之匹配的目標組件如果指定了Component這個屬性,Intent則會直接根據(jù)組件名查找到
34、相應(yīng)的組件,而不再執(zhí)行上述查找過程指定Component屬性后,Intent的其他屬性都是可選的,4.2.1 Intent屬性,(6) Extra,,,Extra屬性用于添加一些附加信息,例如發(fā)送一個郵件,就可以通過Extra屬性來添加主題(subject)和內(nèi)容(body)。通過使用Intent對象的putExtra()方法來添加附加信息。將一個人的姓名附加到Intent對象中,代碼如下所示: Intent i
35、ntent = new Intent(); ntent.putExtra(“name” ,“zhangshan”);,通過使用Intent對象的getXXXExtra()方法可以獲取附加信息。例如,將上面代碼存入Intent對象中的人名獲取出來,因存入的是字符串,所以可以使用getStringExtra()方法獲取數(shù)據(jù),代碼為: String name=intent.getStringExtra("
36、name");,4.2.2 Intent解析,根據(jù)Intent尋找目標組件時所采用的方式不同,可以將Intent分為兩類:直接Intent和間接Intent,,(1)直接Intent直接Intent通過直接指定組件來實現(xiàn),常用方法有setComponent(),setClassName()或setClass(),如下示例:,,//創(chuàng)建一個Intent對象Intent intent = new Intent();//指定I
37、ntent對象的目標組件是Activity2intent.setClass(Activity1.this, Activity2.class);,4.2.2 Intent解析,,, ,通過Intent Filter過濾實現(xiàn),過濾時通常根據(jù)Action、Data和Category屬性進行匹配查找。Android提供了兩種生成Intent Filter的方式:一種是通過IntentFilter類生成;另一種通過在配置文
38、件AndroidManifest.xml中定義元素生成。在AndroidManifest.xml配置文件中,Intent Filter以元素來指定。一個組件中可以有多個元素,每個元素描述不同的能力,如下示例:,(2)間接Intent,4.2.2 Intent解析,,A、子元素,,注意:列表中的Action屬性不能為空,否則所有的Intent都會因匹配失敗而被阻塞。所以一個元素下至少需要包含一個子元素,這樣系統(tǒng)才能處理Intent消息,
39、標簽中常用、和這些子元素,分別對應(yīng)Intent中的Action、Data和Category屬性,用于對Intent進行匹配。一個中可以添加多個子元素,如下所示:,4.2.2 Intent解析,,B、子元素,,注意:與Action一樣,列表中的Category屬性不能為空。Category屬性的默認值“android.intent.category.DEFAULT”是啟動Activity的默認值,在添加其他Category屬性值時,該值
40、必須添加,否則也會匹配失敗。,一個中也可以添加多個子元素,例如:,,4.2.2 Intent解析,,C、子元素,,一個中可以包含多個子元素,用于指定組件可以執(zhí)行的數(shù)據(jù),例如:,,,4.2.3 Activity的跳轉(zhuǎn),,在Android世界的四大組件Activity、BroadcastReceiver、Service、Content Provider中,前三個都是通過Intent來解析進行跳轉(zhuǎn)的,Intent可以說是連接這四大組件的重要橋
41、梁在使用Intent進行Activity之間的跳轉(zhuǎn)時,我們通常有三種Intent跳轉(zhuǎn)方式,即:不帶參數(shù)的跳轉(zhuǎn)、帶參數(shù)的跳轉(zhuǎn)以及帶返回值的跳轉(zhuǎn),(1)不帶參數(shù)跳轉(zhuǎn),4.2.3 Activity的跳轉(zhuǎn),,(2)帶參數(shù)跳轉(zhuǎn)(用Bundle封裝數(shù)據(jù)),Activity1跳轉(zhuǎn)到Activity2之后,Activity2通過Bundle獲取Intent傳過來的值,方法如下:,4.2.3 Activity的跳轉(zhuǎn),,(3)帶返回值的跳轉(zhuǎn)(用Bundl
42、e封裝數(shù)據(jù)),第一個頁面?zhèn)魉蛥?shù)值的代碼如下所示:,注:startActivityForResult(Intent intent, Int requestCode)方法中的參數(shù) requestCode用于識別第二個頁面?zhèn)骰貋淼闹怠?第二個頁面準備返回數(shù)據(jù)的代碼如下所示:,4.2.3 Activity的跳轉(zhuǎn),,(3)帶返回值的跳轉(zhuǎn)(用Bundle封裝數(shù)據(jù)),第一個頁面接收返回值的代碼如下所示:,4.2.3 Activity的跳轉(zhuǎn),,(3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- [計算機軟件及應(yīng)用]ssisintegrationservice
- 計算機軟件開發(fā)與用戶實踐應(yīng)用
- [計算機軟件及應(yīng)用]軟件物流系統(tǒng)
- [計算機軟件及應(yīng)用]功略
- [計算機軟件及應(yīng)用]ea教程
- [計算機軟件及應(yīng)用]mfcwindows大作業(yè)
- [計算機軟件及應(yīng)用]mfcwindows大作業(yè)
- 計算機軟件應(yīng)用與發(fā)展分析
- 關(guān)于計算機軟件開發(fā)應(yīng)用的相關(guān)探討
- 計算機軟件工程管理與應(yīng)用解析
- 計算機軟件開發(fā)合同
- [計算機軟件及應(yīng)用]棧的應(yīng)用和串圖
- 輻射醫(yī)學(xué)應(yīng)用中的計算機軟件開發(fā).pdf
- 淺析新時期計算機軟件開發(fā)技術(shù)的應(yīng)用及發(fā)展
- 計算機軟件在工程上的應(yīng)用
- 計算機軟件數(shù)據(jù)接口的應(yīng)用
- [計算機軟件及應(yīng)用]服務(wù)器測試流程
- [計算機軟件及應(yīng)用]教學(xué)事務(wù)管理系統(tǒng)
- 計算機軟件與理論
- [計算機軟件及應(yīng)用]軟件工程工具--軟件項目管理與工具
評論
0/150
提交評論