android開發(fā)課件講義:Activity and Intent_第1頁
android開發(fā)課件講義:Activity and Intent_第2頁
android開發(fā)課件講義:Activity and Intent_第3頁
android開發(fā)課件講義:Activity and Intent_第4頁
android開發(fā)課件講義:Activity and Intent_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Activity&intent創(chuàng)建多個窗口Intent類Activity間的數(shù)據(jù)傳遞Activity的生命周期程序調(diào)試及Log類創(chuàng)建多個窗口Intent類Activity間的數(shù)據(jù)傳遞Activity的生命周期程序調(diào)試及Log類創(chuàng)建第二個窗口在android中每個activity類都可以看成一個窗口,如果我們想要多個窗口,就需要創(chuàng)建多個activity。選擇File->New->Other->Android->AndroidObject,創(chuàng)建一個空的activity,并命名為SubActivity。這樣,整個系統(tǒng)就有了兩個activity了,即有兩個界面了。如下圖所示當你創(chuàng)建一個新的界面時,系統(tǒng)會同時建立一個對應(yīng)的Layout文件。AndroidManifest文件的變化查看系統(tǒng)的AndroidManifest.xml,我們可以看到多了一個Activity。注意:程序中要用到的activity都要在AnroidManifest.xml中注冊。MainActivity是第一個主窗口,后面的SubActivity和ResponseActivity都是后來添加的新增功能我們希望的功能是:在主窗口中添加一個輸入框和一個按鈕Finish。點擊“Finish”時,切換到子窗口SubActivity,并在子窗口的一個輸入框中顯示主窗口輸入框中輸入的內(nèi)容。事件響應(yīng)Intent類:用于開啟其它窗口putExtra函數(shù):用于數(shù)據(jù)交換setClass:建立兩個窗口的連接根據(jù)Intent啟動另一個Activity主窗口中intent的putExtra函數(shù)用于在兩個activity中傳遞參數(shù),34行的意思是:傳遞一個name變量,該變量的值由輸入框中的文本決定。主窗口中35行setClass函數(shù)確定要跳轉(zhuǎn)的activity,并在36行調(diào)用startActivity進行下一個窗口的顯示。此程序僅在兩個頁面之間相互跳轉(zhuǎn),但是每次跳轉(zhuǎn)會創(chuàng)建新的Activity,所以在startActivity()之后需要調(diào)用finish()銷毀當前Activity,如果不銷毀,多次跳轉(zhuǎn)后,程序的Activity棧中會存放多個Activity注意:上頁代碼中未添加finish()函數(shù),需自行添加第二個窗口的代碼getIntent:獲得對應(yīng)的intent類getStringExtra:獲得string類型的“變量-值”數(shù)據(jù)對在子窗口的20行,利用getStringExtra提取name變量的值,并將其顯示在輸入框中。如果不調(diào)用上述putExtra和getStringExtra函數(shù),則是另一種不傳遞參數(shù)的Activity切換方法。Intent類Intent,又稱為意圖,是一種運行時綁定機制,它能在程序運行的過程中鏈接兩個不同的組件(Activity、Service、BroadcastReceiver等)。通過Intent,程序可以向Android表達某種請求或意愿,Android會根據(jù)意愿的內(nèi)容選擇適當?shù)慕M件來請求。在這些組件之間的通訊中,主要是由Intent協(xié)助完成的。Intent負責對應(yīng)用中一次操作的動作、動作涉及數(shù)據(jù)、附加數(shù)據(jù)進行描述,Android則根據(jù)此Intent的描述,負責找到對應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。因此,Intent在這里起著一個媒體中介的作用,專門提供組件互相調(diào)用的相關(guān)信息,實現(xiàn)調(diào)用者與被調(diào)用者之間的解耦。除了用于上述同一個進程間的Activity切換以外,Intent類還可以用于啟動不同進程(或者說不同應(yīng)用程序)的窗口。這與Windows編程中利用WinExec函數(shù)來啟動其它EXE程序類似。比如:點擊某個網(wǎng)絡(luò)地址后,啟動瀏覽畫面Activity;點擊某個電話號碼,啟動撥號畫面Activity;點擊某個視頻或者圖片,啟動播放或者預(yù)覽畫面的Activity。這一切功能,都與Intent類有關(guān)。通過Intent請求Activity,必須在AndroidManifest.xml文件中對被請求的Activity新增標簽配置,否則會導(dǎo)致錯誤。一般通過系統(tǒng)新增Activity時,eclipse會自動在該文件中增加配置信息。Intent一般包含兩個主要信息,action、data。action:表示這個Intent此次操作的動作。data:表示這次動作涉及的數(shù)據(jù)。下面的例子較好地解釋了Intent類使用時,會攜帶動作的相關(guān)數(shù)據(jù)。點擊按鈕撥打電話例子Intent和IntentFilterintent本身(是一個Intent對象),是一個被動的數(shù)據(jù)結(jié)構(gòu)保存一個將要執(zhí)行的操作的抽象描述,或在廣播的情況下,通常是某事已經(jīng)發(fā)生且正在宣告?;顒?、服務(wù)、廣播接收者為了告知系統(tǒng)能夠處理哪些隱式intent,它們可以有一個或多個intent過濾器。每個過濾器描述組件的一種能力,即樂意接收的一組intent。一個組件能夠做的任何工作都可能有獨立的過濾器。例如,記事本中的NoteEditer活動有兩個過濾器,一個是啟動一個指定的記錄,用戶可以查看和編輯;另一個是啟動一個新的、空的記錄,用戶能夠填充并保存。詳細介紹一個intent過濾器是一個IntentFilter類的實例。intent過濾器通常不在java代碼中設(shè)置,而是在應(yīng)用程序的清單文件(AndroidManifest.xml)中以<intent-filter>元素設(shè)置。關(guān)于Intent和IntentFilter,可以參考該網(wǎng)址:/skynet/archive/2010/07/20/1781644.html

當你開始一個Android程序后,默認的AndroidManifest.xml中有以下內(nèi)容。創(chuàng)建多個窗口Intent類Activity間的數(shù)據(jù)傳遞Activity的生命周期程序調(diào)試及Log類除了Intent的putExtra函數(shù),使用Bundle類可以在Activity之間一次性傳遞更多的數(shù)據(jù)。Bundle的英文本意就是捆綁。事實上,Activity間的替換包括無結(jié)果返回和有結(jié)果返回兩種。無結(jié)果返回:比如,新開Acitivity瀏覽一個網(wǎng)頁。有結(jié)果返回:比如,打開聯(lián)系人頁面,選中一個聯(lián)系人,并保存選中的聯(lián)系人信息后返回。無返回結(jié)果下面介紹一個例子:同時輸入姓名、電話信息,然后選擇一個按鈕,在另一個Activity(ResponseActivity)中顯示這兩樣信息。主窗口的UI如下(UI請大家自己更新),并且新增一個ResponseActivity的窗口,用于顯示。代碼利用Bundle類捆綁數(shù)據(jù)在第二個Activity中的響應(yīng)使用getExtras獲得Bundle類有返回結(jié)果上述例子使用startActivity函數(shù)開啟其它的Activity,并可能傳入數(shù)據(jù),但是新顯示的Activity并未返回任何結(jié)果。而對于某些應(yīng)用,比如打開聯(lián)系人名單,選中一個聯(lián)系人,并要求返回選中的聯(lián)系人,則屬于需要目標Activity返回結(jié)果的例子。此時,我們需要用的函數(shù)是startActivityForResult,該函數(shù)的第二個參數(shù)是一個請求碼,可以自己定義。此外,還需要在當前的Activity重載onActivityResult函數(shù),并在該函數(shù)中根據(jù)請求碼對返回的結(jié)果進行處理。請求第二個Activity注意:如果使用模擬器,可能因為沒有創(chuàng)建聯(lián)系人,調(diào)出的界面也無人可選自定義:finalintPICKUP_CONTACT=1000;返回值的響應(yīng)在當前的Activity中需要重載onActivityResult函數(shù),在該函數(shù)中響應(yīng)新Activity中返回的數(shù)據(jù)。添加onActivityResult函數(shù)的方法:在源代碼java文件中點擊右鍵,選擇source->Override/ImplementmethodsonActivityResult函數(shù)重載onActivityResult函數(shù)實現(xiàn)(本例中沒有具體實現(xiàn)選中者的搜索,只是簡單的返回了“選中者”):之前自定義的請求代碼上述例子中,打開了一個通訊本,并返回了一個選中的聯(lián)系人。這個過程是調(diào)用了系統(tǒng)的Activity,返回值是系統(tǒng)自定義的,即:RESULT_OK或者RESULT_CANCELED等。如果不是調(diào)用系統(tǒng)的Activity,而是自己寫的,則需要在目標的Activity中調(diào)用setResult來返回創(chuàng)建多個窗口Intent類Activity間的數(shù)據(jù)傳遞Activity的生命周期程序調(diào)試及Log類Activity生命周期-堆棧Android中利用Activity類來表示一個交互界面,所有的Activity在系統(tǒng)里由Activity堆棧所管理,當一個新的Activity被執(zhí)行后,它將會被放置到堆棧的最頂部,并且變成運行時Activity,而先前的Activity原則上還是會存在于堆棧中。所以,該堆棧的特點是:最早進入的Activity,排在最底下。較遲進入的Activity,則排在更上面。當運行時的Activity離開后,接下來顯示堆棧中最頂部的Activity。請在手機上進行一定的操作,嘗試理解這個概念。Activity棧遵循“后進先出”的規(guī)則Activity生命周期的狀態(tài)Activity生命周期指Activity從啟動到銷毀的過程Activity表現(xiàn)為四種狀態(tài),分別是活動/運行狀態(tài)、暫停狀態(tài)、停止狀態(tài)和非活動狀態(tài)活動狀態(tài),Activity在用戶界面中處于最上層,完全能不用戶看到,能夠與用戶進行交互暫停狀態(tài),Activity在界面上被部分遮擋,該Activity不再處于用戶界面的最上層,且不能夠與用戶進行交互。暫停狀態(tài)如果一個Activity失去焦點(focus)但還看得到它的畫面(比如:一個新的Activity畫面并不是全屏幕或者它是一個半透明的情況),那失去焦點的Activity則處在paused的狀態(tài)。像這個失去焦點的Activity它還是完全活著的,并沒有消失。(活著的意思是指,Activity自己本身所有的狀態(tài)及數(shù)據(jù)都還是存在的,也跟窗口管理程windowmanager保持聯(lián)系著)。像這種paused的Activity,會在一種情況下消失,那就是當系統(tǒng)的內(nèi)存不夠用之時,系統(tǒng)會自動判斷,把不重要的Activity移除。停止狀態(tài)停止狀態(tài),Activity在界面上完全不能被用戶看到,也就是說這個Activity被其他Activity全部遮擋,它仍然保有全部的狀態(tài)及數(shù)據(jù),但因為它已不再被使用者看見,所以它的畫面是被隱藏起來的(畫面不需要更新),當系統(tǒng)內(nèi)存不足時,這種stop狀態(tài)的Activity時最先被系統(tǒng)考慮拿下來釋放內(nèi)存的。非活動狀態(tài):不在以上三種狀態(tài)中的Activity則處于非活動狀態(tài)Activity狀態(tài)圖Activity的四種狀態(tài)的變換關(guān)系圖狀態(tài)響應(yīng)事件publicclassMyActivityextendsActivity{protectedvoidonCreate(BundlesavedInstanceState);protectedvoidonStart();protectedvoidonRestart();protectedvoidonResume();protectedvoidonPause();protectedvoidonStop();protectedvoidonDestroy();}一樣的,添加上述函數(shù)的方法:在源代碼java文件中點擊右鍵,選擇source->Override/ImplementmethodsActivity生命周期的事件響應(yīng)函數(shù)函數(shù)是否

可終止說明onCreate()否Activity啟動后第一個被調(diào)用的函數(shù),常用來進行Activity的初始化,例如創(chuàng)建View、綁定數(shù)據(jù)或恢復(fù)信息等。onStart()否當Activity顯示在屏幕上時,該函數(shù)被調(diào)用。onRestart()否當Activity從停止狀態(tài)進入活動狀態(tài)前,調(diào)用該函數(shù)。onResume()否當Activity能夠與用戶交互,接受用戶輸入時,該函數(shù)被調(diào)用。此時的Activity位于Activity棧的棧頂。onPause()是當Activity進入暫停狀態(tài)時,該函數(shù)被調(diào)用。一般用來保存持久的數(shù)據(jù)或釋放占用的資源。onStop()是當Activity進入停止狀態(tài)時,該函數(shù)被調(diào)用。onDestroy()是在Activity被終止前,即進入非活動狀態(tài)前,該函數(shù)被調(diào)用。Activity狀態(tài)保存/恢復(fù)的事件響應(yīng)函數(shù)函數(shù)是否

可終止說明onSaveInstanceState()否Android系統(tǒng)因資源不足終止Activity前調(diào)用該函數(shù),用以保存Activity的狀態(tài)信息,供onRestoreInstanceState()或onCreate()恢復(fù)之用。onRestoreInstanceState()否恢復(fù)onSaveInstanceState()保存的Activity狀態(tài)信息,在onStart()和onResume()之間被調(diào)用。Activity生命周期的分段全生命周期全生命周期是從Activity建立到銷毀的全部過程,始于onCreate(),結(jié)束于onDestroy()。使用者通常在onCreate()中初始化Activity所能使用的全局資源和狀態(tài),并在onDestroy()中釋放這些資源注意:onCreate()在Activity的整個生命周期,只會執(zhí)行一次。在一些極端的情況下,Android系統(tǒng)會不調(diào)用onDestroy()函數(shù),而直接終止進程可視生命周期可視生命周期是Activity在界面上從可見到不可見的過程,開始于onStart(),結(jié)束于onStop()onStart()一般用來初始化或啟動與更新界面相關(guān)的資源onStop()一般用來暫?;蛲V挂磺信c更新用戶界面相關(guān)的線程、計時器和服務(wù)onRestart()函數(shù)在onSart()前被調(diào)用,用來在Activity從不可見變?yōu)榭梢姷倪^程中,進行一些特定的處理過程onStart()和onStop()會被多次調(diào)用onStart()和onStop()也經(jīng)常被用來注冊和注銷BroadcastReceiver活動生命周期活動生命周期是Activity在屏幕的最上層,并能夠與用戶交互的階段,開始于onResume(),結(jié)束于onPause()在Activity的狀態(tài)變換過程中onResume()和onPause()經(jīng)常被調(diào)用,因此這兩個函數(shù)中應(yīng)使用更為簡單、高效的代碼。onPause()常用來保存持久數(shù)據(jù),如界面上的用戶的輸入信息等onPause()和onSaveInstanceState()的區(qū)別這兩個函數(shù)都可以用來保存界面的用戶輸入數(shù)據(jù),他們的區(qū)別在于onPause()一般用于保存持久性數(shù)據(jù),并將數(shù)據(jù)保存在存儲設(shè)備上的文件系統(tǒng)或數(shù)據(jù)庫系統(tǒng)中的onSaveInstanceState()主要用來保存動態(tài)的狀態(tài)信息,信息一般保存在Bundle中在onSaveInstanceState()保存在Bundle中的數(shù)據(jù),系統(tǒng)在調(diào)用onRestoreInstanceState()和onCreate()時,會同樣利用Bundle將數(shù)據(jù)傳遞給函數(shù)創(chuàng)建多個窗口Intent類Activity間的數(shù)據(jù)傳遞Activity的生命周期程序調(diào)試及Log類LogCat在任何編程環(huán)境中,調(diào)試都是十分重要的。沒人能保證他寫的代碼百分百正確。在Android中,不能像Java中利用System.out.println一樣把結(jié)果輸出到終端。但Android提供了一個工具:LogCat。如果你看不到,可以通過window->showview->other,在彈出的對話框中選擇android文件夾下的logcat。界面大致如下

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論