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

下載本文檔

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

文檔簡介

第3章Android生命周期本章學(xué)習(xí)目標(biāo):了解Android系統(tǒng)的四大基本組件了解Android系統(tǒng)的進(jìn)程優(yōu)先級的變化方式了解Activity的生命周期中各狀態(tài)的變化關(guān)系掌握Activity事件回調(diào)函數(shù)的作用和調(diào)用順序3.1

Android組件Android系統(tǒng)四大組件(調(diào)用的基本模塊)ActivityAndroid程序的呈現(xiàn)層,顯示可視化的用戶界面,并接收與用戶交互所產(chǎn)生的界面事件Android應(yīng)用程序可以包含一個或多個Activity,一般需要指定一個程序啟動時顯示的ActivityServiceService一般用于沒有用戶界面,但需要長時間在后臺運(yùn)行的應(yīng)用可公開Service的程序接口,供其他進(jìn)程調(diào)用3.1

Android組件Android系統(tǒng)四大組件(調(diào)用的基本模塊)BroadcastReceiver用來接收廣播消息的組件,不包含任何用戶界面可以啟動Activity或者Notification通知用戶接收到重要信息Notification能夠通過多種方法提示用戶,包括閃動背景燈、震動設(shè)備、發(fā)出聲音或在狀態(tài)欄上放置一個圖標(biāo)ContentProvider是Android系統(tǒng)提供的一種標(biāo)準(zhǔn)的共享數(shù)據(jù)的機(jī)制,其他程序通過ContentProvider訪問程序的私有數(shù)據(jù)Android系統(tǒng)內(nèi)部提供一些內(nèi)置的ContentProvider,能夠?yàn)閼?yīng)用程序提供重要的數(shù)據(jù)信息聯(lián)系人信息通話記錄ContentProvider的作用Android的系統(tǒng)組件回顧3.2程序生命周期Android系統(tǒng)的進(jìn)程優(yōu)先級從高到低分別為:前臺進(jìn)程可見進(jìn)程服務(wù)進(jìn)程后臺進(jìn)程空進(jìn)程3.2程序生命周期前臺進(jìn)程前臺進(jìn)程是Android系統(tǒng)中最重要的進(jìn)程進(jìn)程中的Activity正在與用戶進(jìn)行交互;Service被Activity調(diào)用,而且這個Activity正在與用戶進(jìn)行交互;Service正在執(zhí)行聲明周期中的回調(diào)函數(shù),如onCreate()、onStart()或onDestroy();進(jìn)程的BroadcastReceiver正在執(zhí)行onReceive()函數(shù);3.2程序生命周期可見進(jìn)程可見進(jìn)程指部分程序界面能夠被用戶看見,卻不在前臺與用戶交互,不響應(yīng)界面事件的進(jìn)程如果一個進(jìn)程包含Service,且這個Service正在被用戶可見的Activity調(diào)用,此進(jìn)程同樣被視為可見進(jìn)程服務(wù)進(jìn)程包含已啟動服務(wù)的進(jìn)程Android系統(tǒng)除非不能保證前臺進(jìn)程或可視進(jìn)程所必要的資源,否則不強(qiáng)行清除服務(wù)進(jìn)程3.2程序生命周期后臺進(jìn)程指不包含任何已經(jīng)啟動的服務(wù),而且沒有任何用戶可見的Activity的進(jìn)程Android系統(tǒng)中一般存在數(shù)量較多的后臺進(jìn)程空進(jìn)程空進(jìn)程是不包含任何活躍組件的進(jìn)程3.2程序生命周期優(yōu)先級決定與變化規(guī)則進(jìn)程的優(yōu)先級取決于所有組件中的優(yōu)先級最高的部分進(jìn)程的優(yōu)先級會根據(jù)與其他進(jìn)程的依賴關(guān)系而變化3.3

Android組件組件生命周期所有Android組件都具有自己的生命周期,是從組件建立到組件銷毀的整個過程在生命周期中,組件會在可見、不可見、活動、非活動等狀態(tài)中不斷變化3.3

Activity生命周期Activity生命周期Activity生命周期指Activity從啟動到銷毀的過程Activity表現(xiàn)為四種狀態(tài)活動狀態(tài),Activity在用戶界面中處于最上層,完全能被用戶看到,能夠與用戶進(jìn)行交互暫停狀態(tài),Activity在界面上被部分遮擋,該Activity不再處于用戶界面的最上層,且不能夠與用戶進(jìn)行交互停止?fàn)顟B(tài),Activity在界面上完全不能被用戶看到,也就是說這個Activity被其他Activity全部遮擋非活動狀態(tài),不在以上三種狀態(tài)中的Activity則處于非活動狀態(tài)3.3

Activity生命周期Activity的四種狀態(tài)的變換關(guān)系圖3.3

Activity生命周期Activity棧遵循“后進(jìn)先出”的規(guī)則3.3

Activity生命周期隨著Activity自身狀態(tài)的變化,Android系統(tǒng)會調(diào)用不同的事件回調(diào)函數(shù)Activity的主要事件回調(diào)函數(shù)

publicclassMyActivityextendsActivity{protectedvoidonCreate(Bundle

savedInstanceState);protectedvoidonStart();protectedvoidonRestart();protectedvoidonResume();protectedvoidonPause();protectedvoidonStop();protectedvoidonDestroy();}3.3

Activity生命周期函數(shù)Activity生命周期的事件回調(diào)函數(shù)函數(shù)是否可終止說明onCreate()否Activity啟動后第一個被調(diào)用的函數(shù),常用來進(jìn)行Activity的初始化,例如創(chuàng)建View、綁定數(shù)據(jù)或恢復(fù)信息等。onStart()否當(dāng)Activity顯示在屏幕上時,該函數(shù)被調(diào)用。onRestart()否當(dāng)Activity從停止?fàn)顟B(tài)進(jìn)入活動狀態(tài)前,調(diào)用該函數(shù)。onResume()否當(dāng)Activity可以接受用戶輸入時,該函數(shù)被調(diào)用。onPause()否當(dāng)Activity進(jìn)入暫停狀態(tài)時,該函數(shù)被調(diào)用。主要用來保存持久數(shù)據(jù)、關(guān)閉動畫、釋放CPU資源等。該函數(shù)中的代碼必須簡短,因?yàn)榱硪粋€Activity必須等待該函數(shù)執(zhí)行完畢后才能顯示在界面上。onStop()是當(dāng)Activity不對用戶可見后,該函數(shù)被調(diào)用,Activity進(jìn)入停止?fàn)顟B(tài)。onDestroy()是在Activity被終止前,即進(jìn)入非活動狀態(tài)前,該函數(shù)被調(diào)用。有兩種情況該函數(shù)會被調(diào)用:(1)當(dāng)程序主動調(diào)用finish()函數(shù);(2)程序被Android系統(tǒng)終結(jié)。3.3

Activity生命周期onRestoreInstanceState()和onSaveInstanceState()不屬于生命周期的事件回調(diào)函數(shù),但可以用于保存和恢復(fù)Activity的界面臨時信息onSaveInstanceState()會將界面臨時信息保存在Bundle中,onCreate()和onRestoreInstanceState()都可以恢復(fù)這些保存的信息簡化的辦法是使用onCreate()恢復(fù),但有些特殊的情況下還是需要使用onRestoreInstanceState()函數(shù)恢復(fù)必須在界面完全初始化完畢后才能進(jìn)行的操作或需要由子類來確定是否采用缺省設(shè)置等函數(shù)說明onSaveInstanceState()暫?;蛲V笰ctivity前調(diào)用該函數(shù),用以保存Activity的臨時狀態(tài)信息onRestoreInstanceState()恢復(fù)onSaveInstanceState()保存的Activity狀態(tài)信息。3.3

Activity生命周期Activity事件回調(diào)函數(shù)的調(diào)用順序Activity生命周期分類Activity的生命周期可分為全生命周期、可視生命周期和活動生命周期每種生命周期中包含不同的事件回調(diào)函數(shù)3.3

Activity生命周期全生命周期全生命周期是從Activity建立到銷毀的全部過程,始于onCreate(),結(jié)束于onDestroy()使用者通常在onCreate()中初始化Activity所能使用的全局資源和狀態(tài),并在onDestroy()中釋放這些資源在一些極端的情況下,Android系統(tǒng)會不調(diào)用onDestroy()函數(shù),而直接終止進(jìn)程3.3

Activity生命周期可視生命周期可視生命周期是Activity在界面上從可見到不可見的過程,開始于onStart(),結(jié)束于onStop()3.3

Activity生命周期可視生命周期onStart()一般用來初始化或啟動與更新界面相關(guān)的資源onStop()一般用來暫?;蛲V挂磺信c更新用戶界面相關(guān)的線程、計時器和服務(wù)onRestart()函數(shù)在onSart()前被調(diào)用,用來在Activity從不可見變?yōu)榭梢姷倪^程中,進(jìn)行一些特定的處理過程onStart()和onStop()會被多次調(diào)用3.3

Activity生命周期活動生命周期活動生命周期是Activity在屏幕的最上層,并能夠與用戶交互的階段,開始于onResume(),結(jié)束于onPause()在Activity的狀態(tài)變換過程中onResume()和onPause()經(jīng)常被調(diào)用,因此這兩個函數(shù)中應(yīng)使用更為簡單、高效的代碼3.3

Activity生命周期onPause()和onSaveInstanceState()這兩個函數(shù)都可以用來保存界面的用戶輸入數(shù)據(jù)onPause()一般用于保存持久性數(shù)據(jù),并將數(shù)據(jù)保存在存儲設(shè)備上的文件系統(tǒng)或數(shù)據(jù)庫系統(tǒng)中的onSaveInstanceState()主要用來保存動態(tài)的狀態(tài)信息,信息一般保存在Bundle中Bundle是能夠保存多種格式數(shù)據(jù)的對象,系統(tǒng)在調(diào)用onRestoreInstanceState()和onCreate()時,會同樣利用Bundle將數(shù)據(jù)傳遞給函數(shù)3.3

Activity生命周期活動生命周期下面以ActivityLifeCycle示例來進(jìn)行說明,ActivityLifeCycle示例的運(yùn)行界面3.3

Activity生命周期ActivityLifeCycleActivity.java文件的全部代碼packageedu.hrbeu.ActivityLifeCycle;

importandroid.app.Activity;importandroid.os.Bundle;importandroid.util.Log;

publicclassActivityLifeCycleextendsActivity{

privatestaticStringTAG="LIFTCYCLE";

@Override//完全生命周期開始時被調(diào)用,初始化Activity

publicvoidonCreate(Bundle

savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Log.i(TAG,"1.oncreate()");

Buttonbut=(Button)findViewById(R.id.btn_finish);

but.setOnClickListener(new

View.OnClickListener(){@overridepublicvoid

onClick(Viewview){finish();}

});}3.3

Activity生命周期@Override//可視生命周期開始時被調(diào)用,對用戶界面進(jìn)行必要的更改

publicvoidonStart(){

super.onStart();

Log.i(TAG,"(2)onStart()");}

@Override//在onStart()后被調(diào)用,用于恢復(fù)onSaveInstanceState()保存的用戶界面信息

publicvoidonRestoreInstanceState(Bundle

savedInstanceState){

super.onRestoreInstanceState(savedInstanceState);

Log.i(TAG,"(3)onRestoreInstanceState()");}

3.3

Activity生命周期@Override//在活動生命周期開始時被調(diào)用,恢復(fù)被onPause()停止的用于界面更新的資源

publicvoidonResume(){

super.onResume();

Log.i(TAG,"(4)onResume()");}33.@Override//在onResume()后被調(diào)用,保存界面信息

publicvoidonSaveInstanceState(Bundle

savedInstanceState){super.onSaveInstanceState(savedInstanceState);

Log.i(TAG,"(5)onSaveInstanceState()");}

}51.@Override//在重新進(jìn)入可視生命周期前被調(diào)用,載入界面所需要的更改信息

publicvoidonRestart(){

super.onRestart();

Log.i(TAG,"(6)onRestart()");}

@Override//在活動生命周期結(jié)束時被調(diào)用,用來保存持久的數(shù)據(jù)或釋放占用的資源

publicvoidonPause(){

super.onPause();

Log.i(TAG,“(7)onPause()”);、3.3

Activity生命周期ActivityLifeCycle.java文件的代碼@Override//在可視生命周期結(jié)束時被調(diào)用,一般用來保存持久的數(shù)據(jù)或釋放占用的資源publicvoidonStop(){

super.onStop();

Log.i(TAG,"(8)onStop()");}

@Override//在完全生命周期結(jié)束時被調(diào)用,釋放資源,包括線程、數(shù)據(jù)連接等

publicvoidonDestroy(){

super.onDestroy();

Log.i(TAG,"(9)onDestroy()");}}Log類簡單的使用Log.v(Stringtag,Stringmsg);//VERBOSELog.d(Stringtag,Stringmsg);//DEBUGLog.i(Stringtag,Stringmsg);//INFOLog.w(Stringtag,Stringmsg);//WARNLog.e(Stringtag,Stringmsg);//ERROR3.3

Activity生命周期上面的程序主要通過在生命周期函數(shù)中添加“日志點(diǎn)”的方法進(jìn)行調(diào)試,程序的運(yùn)行結(jié)果將會顯示在LogCa

溫馨提示

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

評論

0/150

提交評論