標籤:技術分享 提示 man nbsp 入棧 載入 create 對話方塊 存在
整理一下Android的四大組件的生命週期吧,參考書目:《第一行代碼》
Android四大組件
展示了返回棧是如何管理活動入棧出棧的操作的:
活動的生存期:
- onCreate():在活動第一次被建立的時候調用,在這個方法中完成活動費初始化操作,如載入布局,綁定事件等。
- onStart():在活動歐不可加變成不可見的時候調用。
- onResume():在活動準備好和使用者進行互動的時候調用。此時的活動一定位於返回棧的棧頂,並且處於運行狀態。
- onPause():這個方法在系統準備去啟動或者恢複另一個活動的時候調用。通常會在這個方法中將一些消耗GPU的資源釋放掉,以儲存一些關鍵資料。
- onStop():這個方法在活動完全不可見的時候調用。他和onPuse()方法的區別在於,如果啟動的新活動是一個對話方塊式的活動,那麼onPause()方法會得到執行,而onStop()方法不會執行。
- onDestroy():這個活動在被銷毀之前調用,之後活動狀態將變為銷毀狀態。
- onRestart():這個方法在活動由停止狀態變為運行狀態之前調用,也就是活動被重新啟動了。
流程:
Service的生命週期
當一個項目的any where 調用了Context的startService()方法,相應的服務就會啟動起來,並回調onStartCommand()方法。如果服務未建立則onCreate()方法先於onStartCommand()方法執行。服務啟動後會一直保持運行狀態,一直到stopService() / stopSelf()方法被調用。*雖然每調用一次startService()方法,onStarCommand()就會執行一次,但實際上每個服務都只會存在一個執行個體。所以,不管調用了多少次startService()方法,都只需調用一次stopService()或stopSelf()方法服務就會停止下來了!
In addtion,還可以調用Context的bindService()方法來擷取一個服務的持久串連,會回調服務中的onBind()方法。同理。若服務未建立,則onCreate()方法先執行。之後,調用方可擷取到onBind()方法裡返回的IBinder對象的執行個體。
調用了startService()方法後,再去調用stopService()方法,這時服務中的onDestroy()方法就會執行,表示服務已經銷毀了。同樣的,當調用了bindService()方法後,又去調用unbindService()方法,onDestroy()方法也會執行。
當對一個服務既調用了 startService() 方法,又調用了 bindService() 方法時,要同時調用stopService() 和 unbindService()方法才會執行。
:
BroadcastReceiver的生命週期:
生命週期只有十秒左右,如果在onReceive()內超過十秒內的事情,就會報:Application No Response程式無響應的錯誤資訊,他的生命週期從回調onReceive()方法開始到該方法返回結果後結束。
ContentProvider的生命週期:
建立ContentProvider的步驟:
- onCreate():初始化內容提供器時使用。通常會在這裡完成對資料庫的建立和升級等操作,返回true表示內容提供器初始化成功,返回false則表示失敗。
- query():從內容提示器中查詢資料。使用uri參數來確定查詢那張表,projection參數用於確定查詢哪些列,selection和selectionArgs參數用於約束查詢哪些行,sortOrder參數用於對結果進行排序,查詢的結果放在Cursor對象中返回。
- insert():更新內容提供器中已有的資料。使用URI參數來確定要添加的表,待添加的資料儲存在values參數中。
- update():更新內容提供其中已有的資料,使用URI參數來確定更行哪一張表中的資料,新資料儲存在values參數中,selection和selectionArgs參數用於約束刪除哪些行,被刪除的行數將作為傳回值返回。
- getType():根據傳入的內容URI來返回相應的MIME類型。
Android四大組件