基于安卓平臺的程序設(shè)計:Android生命周期_第1頁
基于安卓平臺的程序設(shè)計:Android生命周期_第2頁
基于安卓平臺的程序設(shè)計:Android生命周期_第3頁
基于安卓平臺的程序設(shè)計:Android生命周期_第4頁
基于安卓平臺的程序設(shè)計:Android生命周期_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Android生命周期1 程序生命周期程序的生命周期程序的生命周期是在Android系統(tǒng)中進(jìn)程從啟動到終止的所有階段,也就是Android程序啟動到停止的全過程程序的生命周期由Android系統(tǒng)進(jìn)行調(diào)度和控制的 1 程序生命周期Android系統(tǒng)中的進(jìn)程優(yōu)先級由高到低前臺進(jìn)程可見進(jìn)程服務(wù)進(jìn)程后臺進(jìn)程空進(jìn)程1 程序生命周期前臺進(jìn)程前臺進(jìn)程是Android系統(tǒng)中最重要的進(jìn)程,是與用戶正在交互的進(jìn)程,包含以下四種情況進(jìn)程中的Activity正在與用戶進(jìn)行交互進(jìn)程服務(wù)被Activity調(diào)用,而且這個Activity正在與用戶進(jìn)行交互進(jìn)程服務(wù)正在執(zhí)行聲明周期中的回調(diào)函數(shù),如onCreate()、onSt

2、art()或onDestroy()進(jìn)程的BroadcastReceiver正在執(zhí)行onReceive()函數(shù)Android系統(tǒng)在多個前臺進(jìn)程同時運行時,可能會出現(xiàn)資源不足的情況,此時會清除部分前臺進(jìn)程,保證主要的用戶界面能夠及時響應(yīng)1 程序生命周期可見進(jìn)程可見進(jìn)程指部分程序界面能夠被用戶看見,卻不在前臺與用戶交互,不響應(yīng)界面事件的進(jìn)程如果一個進(jìn)程包含服務(wù),且這個服務(wù)正在被用戶可見的Activity調(diào)用,此進(jìn)程同樣被視為可見進(jìn)程Android系統(tǒng)一般存在少量的可見進(jìn)程,只有在特殊的情況下,Android系統(tǒng)才會為保證前臺進(jìn)程的資源而清除可見進(jìn)程1 程序生命周期服務(wù)進(jìn)程服務(wù)進(jìn)程是指包含已啟動服務(wù)的

3、進(jìn)程沒有用戶界面在后臺長期運行Android系統(tǒng)除非不能保證前臺進(jìn)程或可視進(jìn)程所必要的資源,否則不強行清除服務(wù)進(jìn)程1 程序生命周期后臺進(jìn)程后臺進(jìn)程是指不包含任何已經(jīng)啟動的服務(wù),而且沒有任何用戶可見的Activity的進(jìn)程Android系統(tǒng)中一般存在數(shù)量較多的后臺進(jìn)程,在系統(tǒng)資源緊張時,系統(tǒng)將優(yōu)先清除用戶較長時間沒有見到的后臺進(jìn)程1 程序生命周期空進(jìn)程空進(jìn)程是不包含任何活躍組件的進(jìn)程空進(jìn)程在系統(tǒng)資源緊張時會被首先清除但為了提高Android系統(tǒng)應(yīng)用程序的啟動速度,Android系統(tǒng)會將空進(jìn)程保存在系統(tǒng)內(nèi)存用,在用戶重新啟動該程序時,空進(jìn)程會被重新使用除了以上的優(yōu)先級外,以下兩方面也決定他們的優(yōu)先

4、級進(jìn)程的優(yōu)先級取決于所有組件中的優(yōu)先級最高的部分進(jìn)程的優(yōu)先級會根據(jù)與其他進(jìn)程的依賴關(guān)系而變化2 Activity生命周期Activity生命周期Activity生命周期指Activity從啟動到銷毀的過程Activity表現(xiàn)為四種狀態(tài),分別是活動狀態(tài)、暫停狀態(tài)、停止?fàn)顟B(tài)和非活動狀態(tài)活動狀態(tài),Activity在用戶界面中處于最上層,完全能不用戶看到,能夠與用戶進(jìn)行交互暫停狀態(tài),Activity在界面上被部分遮擋,該Activity不再處于用戶界面的最上層,且不能夠與用戶進(jìn)行交互停止?fàn)顟B(tài),Activity在界面上完全不能被用戶看到,也就是說這個Activity被其他Activity全部遮擋非活動狀

5、態(tài)不在以上三種狀態(tài)中的Activity則處于非活動狀態(tài)2 Activity生命周期Activity的四種狀態(tài)的變換關(guān)系圖2 Activity生命周期Activity棧遵循“后進(jìn)先出”的規(guī)則2 Activity生命周期事件的回調(diào)函數(shù)public class MyActivity extends Activity protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected v

6、oid onPause(); protected void onStop(); protected void onDestroy(); 2 Activity生命周期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)用。此時的

7、Activity位于Activity棧的棧頂。onPause()是當(dāng)Activity進(jìn)入暫停狀態(tài)時,該函數(shù)被調(diào)用。一般用來保存持久的數(shù)據(jù)或釋放占用的資源。onStop()是當(dāng)Activity進(jìn)入停止?fàn)顟B(tài)時,該函數(shù)被調(diào)用。onDestroy()是在Activity被終止前,即進(jìn)入非活動狀態(tài)前,該函數(shù)被調(diào)用。2 Activity生命周期Activity狀態(tài)保存/恢復(fù)的事件回調(diào)函數(shù)函數(shù)是否可終止說明onSaveInstanceState()否Android系統(tǒng)因資源不足終止Activity前調(diào)用該函數(shù),用以保存Activity的狀態(tài)信息,供onRestoreInstanceState()或onCre

8、ate()恢復(fù)之用。onRestoreInstanceState()否恢復(fù)onSaveInstanceState()保存的Activity狀態(tài)信息,在onStart()和onResume ()之間被調(diào)用。2 Activity生命周期Activity事件回調(diào)函數(shù)的調(diào)用順序Activity生命周期分類Activity的生命周期可分為全生命周期、可視生命周期和活動生命周期每種生命周期中包含不同的事件回調(diào)函數(shù)2 Activity生命周期全生命周期全生命周期是從Activity建立到銷毀的全部過程,始于onCreate(),結(jié)束于onDestroy()使用者通常在onCreate()中初始化Activi

9、ty所能使用的全局資源和狀態(tài),并在onDestroy()中釋放這些資源在一些極端的情況下,Android系統(tǒng)會不調(diào)用onDestroy()函數(shù),而直接終止進(jìn)程2 Activity生命周期可視生命周期可視生命周期是Activity在界面上從可見到不可見的過程,開始于onStart(),結(jié)束于onStop()2 Activity生命周期可視生命周期onStart()一般用來初始化或啟動與更新界面相關(guān)的資源onStop()一般用來暫停或停止一切與更新用戶界面相關(guān)的線程、計時器和服務(wù)onRestart()函數(shù)在onSart()前被調(diào)用,用來在Activity從不可見變?yōu)榭梢姷倪^程中,進(jìn)行一些特定的處理

10、過程onStart()和onStop()會被多次調(diào)用onStart()和onStop()也經(jīng)常被用來注冊和注銷BroadcastReceiver2 Activity生命周期活動生命周期活動生命周期是Activity在屏幕的最上層,并能夠與用戶交互的階段,開始于onResume(),結(jié)束于onPause()在Activity的狀態(tài)變換過程中onResume()和onPause()經(jīng)常被調(diào)用,因此這兩個函數(shù)中應(yīng)使用更為簡單、高效的代碼2 Activity生命周期活動生命周期onPause()是第一個被標(biāo)識為“可終止”的函數(shù)在onPause()返回后,onStop()和onDestroy()隨時能被

11、Android系統(tǒng)終止onPause()常用來保存持久數(shù)據(jù),如界面上的用戶的輸入信息等2 Activity生命周期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中Bundle是能夠保存多種格式數(shù)據(jù)的對象在onSaveInstanceState()保存在Bundle中的數(shù)據(jù),系統(tǒng)在調(diào)用onRestoreInstanceState(

12、)和onCreate()時,會同樣利用Bundle將數(shù)據(jù)傳遞給函數(shù)2 Activity生命周期舉例:建立一個新的Android工程工程名稱:ActivityLifeCycle包名稱:edu.hrbeu.ActivityLifeCycleActivity名稱:ActivityLifeCycleXml名稱: main.xml2 Activity生命周期ActivityLifeCycle.java文件的代碼package edu.hrbeu.ActivityLifeCycle; import android.app.Activity;import android.os.Bundle;import a

13、ndroid.util.Log; public class ActivityLifeCycle extends Activity private static String TAG = LIFTCYCLE; Override /完全生命周期開始時被調(diào)用,初始化Activity public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.i(TAG, (1) onCreate(); Override /可視生命周期開始時

14、被調(diào)用,對用戶界面進(jìn)行必要的更改 public void onStart() super.onStart(); Log.i(TAG, (2) onStart();2 Activity生命周期ActivityLifeCycle.java文件的代碼 Override /在onStart()后被調(diào)用,用于恢復(fù)onSaveInstanceState()保存的用戶界面信息 public void onRestoreInstanceState(Bundle savedInstanceState) super.onRestoreInstanceState(savedInstanceState); Log.i

15、(TAG, (3) onRestoreInstanceState(); Override /在活動生命周期開始時被調(diào)用,恢復(fù)被onPause()停止的用于界面更新的資源 public void onResume() super.onResume(); Log.i(TAG, (4) onResume(); 33. Override / 在onResume()后被調(diào)用,保存界面信息 public void onSaveInstanceState(Bundle savedInstanceState) 2 Activity生命周期ActivityLifeCycle.java文件的代碼 super.on

16、SaveInstanceState(savedInstanceState); Log.i(TAG, (5) onSaveInstanceState(); Override /在重新進(jìn)入可視生命周期前被調(diào)用,載入界面所需要的更改信息 public void onRestart() super.onRestart(); Log.i(TAG, (6) onRestart(); Override /在活動生命周期結(jié)束時被調(diào)用,用來保存持久的數(shù)據(jù)或釋放占用的資源 public void onPause() super.onPause(); Log.i(TAG, (7) onPause() ); 51.

17、Override /在可視生命周期結(jié)束時被調(diào)用,一般用來保存持久的數(shù)據(jù)或釋放占用的資源2 Activity生命周期ActivityLifeCycle.java文件的代碼上面的程序主要通過在生命周期函數(shù)中添加“日志點”的方法進(jìn)行調(diào)試,程序的運行結(jié)果將會顯示在LogCat中為了顯示結(jié)果易于觀察和分析,在LogCat設(shè)置過濾器LifeCycleFilter,過濾方法選擇by Log Tag,過濾關(guān)鍵字為LIFTCYCLEpublic void onStop() super.onStop(); Log.i(TAG, (8) onStop(); Override /在完全生命周期結(jié)束時被調(diào)用,釋放資源,

18、包括線程、數(shù)據(jù)連接等 public void onDestroy() super.onDestroy(); Log.i(TAG, (9) onDestroy(); 2 Activity生命周期全生命周期啟動和關(guān)閉ActivityLifeCycle 的LogCat輸出啟動ActivityLifeCycle按下模擬器的“返回鍵”關(guān)閉ActivityLifeCycleLogCat輸出結(jié)果2 Activity生命周期全生命周期函數(shù)的調(diào)用順序:onCreate() onStart() onResume() onPause() onStop() onDestroy()調(diào)用onCreate()函數(shù)分配資源調(diào)

19、用onStart()將Activity顯示在屏幕上調(diào)用onResume()獲取屏幕焦點調(diào)用onPause()、onStop()和onDestroy(),釋放資源并銷毀進(jìn)程2 Activity生命周期可視生命周期狀態(tài)轉(zhuǎn)換啟動ActivityLifeCycle按“呼出/接聽鍵”啟動內(nèi)置的撥號程序再通過“返回鍵”退出撥號程序ActivityLifeCycle重新顯示在屏幕中可視生命周期的LogCat輸出結(jié)果2 Activity生命周期可視生命周期函數(shù)的調(diào)用順序: onSaveInstanceState () onPause() onStop() onRestart() onStart() onRes

20、ume()調(diào)用onSaveInstanceState()函數(shù)保存Activity狀態(tài)調(diào)用onPause()和onStop(),停止對不可見Activity的更新調(diào)用onRestart()恢復(fù)需要界面上需要更新的信息調(diào)用onStart()和onResume()重新顯示Activity,并接受用戶交互2 Activity生命周期可視生命周期開啟IDA的可視生命周期:Dev Tools Development Settings Immediately destroy activities (IDA)下開啟IDA2 Activity生命周期可視生命周期開啟IDA的可視生命周期的函數(shù)調(diào)用順序:onSav

21、eInstanceState() onPause() onStop() onDestroy() onCreate() onStart() onRestoreInstanceState() onResume()調(diào)用onRestoreInstanceState()恢復(fù)Activity銷毀前的狀態(tài)其他的函數(shù)調(diào)用順序與程序啟動過程的調(diào)用順序相同2 Activity生命周期活動生命周期活動生命周期的LogCat輸出啟動ActivityLifeCycle通過“掛斷鍵”使模擬器進(jìn)入休眠狀態(tài)再通過“掛斷鍵”喚醒模擬器LogCat的輸出結(jié)果2 Activity生命周期活動生命周期函數(shù)調(diào)用順序如下:onSaveI

22、nstanceState() onPause() onResume()調(diào)用onSaveInstanceState ()保存Activity的狀態(tài)調(diào)用onPause()停止與用戶交互調(diào)用onResume()恢復(fù)與用戶的交互3 程序調(diào)試 Android系統(tǒng)提供了兩種調(diào)試工具LogCat和DevTools,用于定位、分析及修復(fù)程序中出現(xiàn)的錯誤3.1 LogCatLogCat是用來獲取系統(tǒng)日志信息的工具,并可以顯示在Eclipse集成開發(fā)環(huán)境中功能:能夠捕獲的信息包括Dalvik虛擬機產(chǎn)生的信息、進(jìn)程信息、ActivityManager信息、PackagerManager信息、Homeloader 信

23、息、WindowsManager信息、Android運行時信息和應(yīng)用程序信息等3 程序調(diào)試3.1 LogCat打開方式:Window Show View Other 打開Show View的選擇菜單,然后在Andoird LogCat中選擇LogCat3 程序調(diào)試3.1 LogCatLogCat打開后,便顯示在Eclipse的下方區(qū)域3 程序調(diào)試3.1 LogCatLogCat的右上方的五個字母表示五種不同類型的日志信息 ,他們的級別依次增高 V:詳細(xì)(Verbose)信息 D:調(diào)試(Debug)信息I:通告(Info)信息 W:警告(Warn)信息 E :錯誤(Error)信息3 程序調(diào)試3

24、.1 LogCat在LogCat中,用戶可以通過五個字母圖標(biāo)選擇顯示的信息類型,級別高于所選類型的信息也會在LogCat中顯示,但級別低于所選類型的信息則不會被顯示3 程序調(diào)試3.1 LogCatLogCat提供了“過濾”功能,在右上角的“+”號和“-”號,分別是添加和刪除過濾器。用戶可以根據(jù)日志信息的標(biāo)簽(Tag)、產(chǎn)生日志的進(jìn)程編號(Pid)或信息等級(Level),對顯示的日志內(nèi)容進(jìn)行過濾3 程序調(diào)試3.1 LogCat程序調(diào)試原理引入android.util.Log包使用Log.v()、 Log.d()、 Log.i() 、Log.w() 和 Log.e()五個函數(shù)在程序中設(shè)置“日志點

25、”當(dāng)程序運行到“日志點”時,應(yīng)用程序的日志信息便被發(fā)送到LogCat中判斷“日志點”信息與預(yù)期的內(nèi)容是否一致進(jìn)而判斷程序是否存在錯誤 Log.v()用來記錄詳細(xì)信息,Log.d()用來記錄調(diào)試信息,Log.i()用來記錄通告信息, Log.w()用來記錄警告信息,Log.e()用來記錄通錯誤信息3 程序調(diào)試3.1 LogCat演示了Log類的具體使用方法package edu.hrbeu.LogCat; import android.app.Activity;import android.os.Bundle;import android.util.Log; public class LogCa

26、t extends Activity final static String TAG = LOGCAT; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); 3 程序調(diào)試3.1 LogCat程序第5行引入android.util.Log包第8行定義標(biāo)簽。標(biāo)簽幫助用戶在LogCat中找到目標(biāo)程序生成的日志信息,同時也能夠利用標(biāo)簽對日志進(jìn)行過濾第14行記錄一個詳細(xì)信息,Log.v()函數(shù)的第一個參數(shù)是日志

27、的標(biāo)簽,第二個參數(shù)是實際的信息內(nèi)容第15行到第18行分別產(chǎn)生了調(diào)試信息、通告信息、警告信息和錯誤信息 Log.v(TAG,Verbose); Log.d(TAG,Debug); Log.i(TAG,Info); Log.w(TAG,Warn); Log.e(TAG,Error); 3 程序調(diào)試3.1 LogCatLogCat工程的運行結(jié)果LogCat對不同類型的信息使用了不同的顏色加以區(qū)別3 程序調(diào)試3.1 LogCat添加過濾器單擊“+”填入過濾器的名稱:LogcatFilter設(shè)置過濾條件為“標(biāo)簽=LOGCAT”3 程序調(diào)試3.1 LogCat LogCat過濾后的輸入結(jié)果無論什么類型的日

28、志信息,屬于哪一個進(jìn)程,只要標(biāo)簽為LOGCAT,都將顯示在LogcatFilter區(qū)域內(nèi)3 程序調(diào)試3.2 DevToolsDevTools是用于調(diào)試和測試的工具包括了一系列用戶各種用途的小工具:Development Settings、Exception Browser、Google Login Service、Instrumentation、Media Scanner、Package Browser、Pointer Location、Raw Image Viewer、Running processes和Terminal Emulator3 程序調(diào)試3.2 DevToolsDevTools的

29、使用界面3 程序調(diào)試3.2 DevTools Development SettingsDevelopment Settings中包含了程序調(diào)試的相關(guān)選項單擊功能前面選擇框,出現(xiàn)綠色的“對號”表示功能啟用模擬器會自動保存設(shè)置3 程序調(diào)試3.2 DevToolsDevelopment Settings選項選項說明Debug App為Wait for debugger選項指定應(yīng)用程序,如果不指定(選擇none),Wait for debugger選項將適用于所有應(yīng)用程序。Debug App可以有效的防止Android程序長時間停留在斷點而產(chǎn)生異常。Wait for debugger阻塞加載應(yīng)用程序,

30、直到關(guān)聯(lián)到調(diào)試器(Debugger)。用于在Activity的onCreate()函數(shù)的進(jìn)行斷點調(diào)試。Show running processs在屏幕右上角顯示運行中的進(jìn)程。Show screen updates選中該選項時,界面上任何被重繪的矩形區(qū)域會閃現(xiàn)粉紅色,有利于發(fā)現(xiàn)界面中不必要的重繪區(qū)域。No App Process limit允許同時運行進(jìn)程的數(shù)量上限。3 程序調(diào)試3.2 DevToolsImmediately destroy activitesActivity進(jìn)入停止?fàn)顟B(tài)后立即銷毀,用于測試在函數(shù) onSaveInstanceState()、onRestoreInstanceState()和onCreate()

溫馨提示

  • 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

提交評論