1.Activity(活動)
此為Android最基本的應用元件,一個活動通常是一個單獨的使用者介面,存在一個或多個UI(又稱view)控制項
- Activity生命週期如下:
當Activity(1)被創建時會調用onCreate在這裡通常做些初始化的動作,當初始化完後會進入onStart,將畫面秀在螢幕上,接著進入onResume,鎖定activity畫面(取得畫面控制權),接著Activity(1)就能被使用者操作。
Another Activity(2) start~ onPause (1)→onCreate(2) →onStart(2) →onResume(2) →onStop(1)
當有另外一個Activity(2)被啟動時,原本的Activity(1)會進入onPause,將一些需要保存的資料保存下來,被啟動的Activity(2)一樣經由onCreate→onStart→onResume程序啟動,注意!!當啟動的Activity(2) onResume成功後,原本的Activity(1)才會進入onStop流程。
Back Activity(1)~ onPause(2) →onRestart(1) →onStart(1) →onResume(1) →onStop(2) onDestroy(2)
當按下back鍵時,Activity(2)會進入onPause將資料保存,Activity(1)如果沒有被系統Destroy掉,則會進入onRestart上述流程,否則會重新Create Activity(1),或是Activity(2)onStop →onDestroy,結束應用程式。這裡的不確定因素是要看程式怎麼寫
2.BroadcaseReceiver(廣播)
讓應程式對外部事件(event)做出回應EX:簡訊、reboot....
- 生命週期:
基本上廣播接收器的生命週期非常的短暫,BroadcaseReceiver的方法為單一的回呼方法onReceive,當廣播接收器的onReceive在執行時,才處於活動狀態,當方法回呼後廣播接收器就被系統Destroy,由於生命週期非常的短暫,所以通常在BroadcaseReceiver中只做簡單的工作,盡量避免複雜的計算等。
3.Service(服務)
無使用者介面,具較長的生命週期,EX:在後台執行的MP3的播放器
生命週期:
服務可以長時間執行,特別的是他沒有視覺化的界面,上圖有兩種方法啟動service: StartService、bindService,兩者的對大差異在於bindService方法可以使呼叫此service的呼叫者獲得與Service互動的類別onBind()。另外還可以透過Broadcase去啟動Service和溝通。
4.Content Provider(內容提供者)
當資料要與其他應用成是共用時,Content Provider提供一套標準,讓其他的應用程式能依據標準存取資料。
應用程序之生命週期:
Android 各元件中各程序的重要性(執行優先順序,假使在記憶體不足狀況下,優先順序低的會先被Destroy)一共劃分為:
1. 前台(Foreground)程序:
- 獲得螢幕控制權(onResume)的activity
- BroadcaseReceiver的onReceive()正在執行
- Service的onStart()或onDestroy()有程式碼正在執行
2. 可見(Visible)程序:
- Activity是可見狀態,但是沒有螢幕控制權,為Activity裡onPause()的程序
3. 服務(Service)程序:
- Service為活動狀態,但無法直接看到(無視圖)
4. 後台(Background)程序:
- 為不可見的Activity,Activity onStop()方法被呼叫
5. 空(Empty)程序:
額外補充:
Android下的java類別檔API分為開放與不開放兩種,開放為值javadoc所包含的不開放則反之,並非代碼中public和private的區別。當修改到開放API時,須在添加的變量or方法加上/**{@hide}*/註釋,此為javadoc的formal;另一方法是下make update-api,系統便會更新並將新添加的變量OR方法加入current.xml(此為API描述檔PATH:framework/base/api/)當中。
- 不處於活動狀態的任何應用程式元件,保留此程序是為了提高啟動速度,因為當下次應用程式的某元件需要被執行時,就無需在建立新的程序。
額外補充:
Android下的java類別檔API分為開放與不開放兩種,開放為值javadoc所包含的不開放則反之,並非代碼中public和private的區別。當修改到開放API時,須在添加的變量or方法加上/**{@hide}*/註釋,此為javadoc的formal;另一方法是下make update-api,系統便會更新並將新添加的變量OR方法加入current.xml(此為API描述檔PATH:framework/base/api/)當中。
沒有留言:
張貼留言