Android的四大組件的理解

1.Activity

   生命週期如圖
   ![這裏寫圖片描述](http://hi.csdn.net/attachment/201109/1/0_1314838777He6C.gif)

首先說一下activity的四種狀態,

  • Running 一個新的activity啓動到棧的時候,它在屏幕的最前端,屬於激活的狀態.
  • Paused 當一個activity被一個Dialog(可以理解爲一個彈出的窗口),或者popwindow(彈窗)覆蓋的時候,它依然和窗口管理器保持連接,系統繼續維護其內部的形態,所以它仍然可見,但他可能已經失去了焦點.
  • stoped 當activity被另一個activity覆蓋的時候,不可見了,就處於stoped的狀態.
  • Killed 當系統殺死或者回收沒有處於啓動狀態的activity的時候處於killed的狀態

    說一下週期方法
    onCreate:當activity第一次啓動的時候執行的方法可以在這個方法中做一些初始化的工作,
    onStart:觸發該方法,表示要展示給用戶看.
    onResume:第一次啓動會調用該方法,當activityonPause和onStop之後又開始了activity的時候會調用到,也就是當需要和用戶發生交互的時候都需要用到這個方法,
    onPause 當有一個前臺的活動,需要activity轉到後臺的時候觸發這個方法.這個時候需要將activity持久化,
    onStop 當一個activity不需要展示給用戶的時候觸發該方法,如果內存不夠用,系統會直接結束這個activity,所以保持數據應該是在onPause的時候做,
    onRestart, 當系統由stoped的狀態再次展示給用戶的時候系統觸發該方法,
    onDestory: 當activity銷燬的時候觸發的方法.
    還有一個方法也是activity的週期方法,
    onSaveInstanceState,系統調用該方法,允許活動保存之前的狀態,比如一串字符串中光標的位置等,通常情況下開發和不需要重寫該方法,在默認的實現中,已經提供了自動保存活動所涉及到的用戶界面組件的所有狀態信息
    

每一個activity都是一個單獨的界面,利用intent傳遞數據

activity的啓動模式

  • standard 默認模式,在默認狀態下創建一個新的activity示例,例如我打開了一個activity A1,如果我再次打開這個activityA1的時候,就會又創建了一個A1,而且是在一個棧中存在的
  • singleTop 可以有多個示例但是不允許相同activity在一個棧中存在,當activity在棧頂的時候,啓動activity而不創建示例,而會調用onNewIntent方法.
    例如,有兩個activity B1,B2兩個activity的內容功能相同,都有兩個按鈕可以跳轉B1.B2.唯一不同的是B1爲Standard ,B2爲singleTop.
    若我打開的順序爲B1->B2->B2,實際打開是B1->B2,只是調用了前一個的onNewIntent方法
    如果我打開B1->B2->B1->B2,則實際順序就是B1->B2->B1->B2.
  • singleTask 只有一個實例,在同一個應用程序中啓動他的時候,若activity不存在,則會在當前的任務棧中創建一個實例,若存在,則會把task中在其上的所有activity都銷燬,並調用它的onNewIntent方法.如果在別的應用程序中啓動它,則會新建一個task,並在該Task中啓動這個activity,singleTask允許別的activity與其在一個Task中共存,
  • singleInstance 一個應用程序只有一個示例而且這個實例獨立運行在一個Task中,這個Task只有這個實例,不允許有別的activity存在.

    2.Service

服務的用途:服務是執行在後臺的,啓動了activity在後臺執行,比如播放多媒體,
檢測sd卡上面的文件變化,後臺記錄你的地理信息位置的變化,

服務的啓動模式:有兩種1.startService 2.bindService

服務的分類: 本地服務(安卓自帶的應用於程序的內部)和遠程服務(用於系統內不得應用程序之間)

生命週期 context.startService->onCreate->onStart->onDestory
context.bindService->onCreate->onBind()->onUnbind->onDestory

兩種啓動模式的區別
onStart->啓動 必須調用stopService 服務結束
bindService->一旦調用者退出,服務終止

3.BroadCastReceiver
broadCastReceiver用於異步接收廣播intent

    分類
    1.有序廣播
    Context.sendOrderBroadcast()發送每次被髮送到一個Receiver.所謂的有序,就是每一個Receiver執行後可以傳播到下一個Receiver也可以中間終止廣播.而Receiver運行的順序可以通過matched Intent-filter裏面的priority來設置優先級控制,
    2.無需廣播
    context.sendBroadCast()發送 是完全異步的.他們都運行在一個未定義的順序,通常是在同一個時間,這樣會更有效,這就意味着不能包含所要使用的結果或者終止的API
    廣播是沒有可視化的界面來顯示廣播信息的,可以通過notifacation和notification Manager來實現可視化.包括圖標和震動信息.

    生命週期
    一個廣播對象只有在被調用onreceiver的時候纔有效,當函數返回後,生命週期結束.
    注意:onreceiver裏面不能使用線程來執行.對於耗時的操作用服務的形式來完成,因爲onreceiver結束的時候broadcastreceiver可能已經無效了.

註冊Receiver

1.靜態註冊
在配置文件裏面添加代碼
    <receiver android:name=".SMSReceiver">

  <intent-filter>

  <action android:name="android.provider.Telephony.SMS_RECEIVED" />

  </intent-filter>

  </receiver>                       
    2.動態方式註冊
public class HelloDemo extends Activity {    
        private BroadcastReceiver receiver;    

        @Override 
        protected void onStart() { 
                super.onStart(); 

                receiver = new CallReceiver(); 
                registerReceiver(receiver, new IntentFilter("android.intent.action.PHONE_STATE")); 
        } 

        @Override 
        protected void onStop() { 
                unregisterReceiver(receiver); 
                super.onStop(); 
        } 
}
靜態方式註冊方便管理                                   

4.ContentProvider
contentProvider內容提供者是Android的四大組件之一,主要用於對外共享數據,也就是把應用中的數據共享給其他的應用訪問,

參考了
http://www.cnblogs.com/pepcod/archive/2013/02/11/2937403.html的博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章