第二篇 android應用開發模式之模板模式

來源:互聯網
上載者:User

        Android提供了一個包含各種服務的應用程式框架, 為應用開發人員提供了標準的應用程式開發方法,應用開發人員只需通過四種組件的使用,實現組件提供的相關介面及提供應用用到的資源,布局及工程XML檔案,最後打包成一個APK檔案就可以完成應用程式的開發。

        Android架構借鑒了J2EE架構的許多設計思想,架構提供完善的服務給服務者使用, 應用程式由一個個組件組成,通過組件的啟動來啟動應用程式,應用程式組件藉助架構運行在架構之中,架構起到了應用伺服器和容器的焦色,負責為應用程式組件提供運行環境,控制應用程式組件的生命週期。

        Android架構如何?控制應用程式組件的生命週期的呢?

       主要是主動性架構API的提供,主動性架構API的實現是藉助採用反向回調( IOC)機制(又稱為好萊塢原則,別調用我們,我會調用你)的模板模式來完成的。模板模式是整個ANDROID架構的核心,採用模板模式,架構為需要控制的應用程式組件在其組件基類中提供了鉤子, 架構通過調用鉤子實現組件的生命週期控制。因此應用程式只需在組件的衍生類別中重新實現鉤子函數(Function Overriding),既可以實現應用程式的客制化功能,又可以實現架構主動調用應用程式,控制應用程式的運行和生命週期的目的。

       這樣既可以實現多樣化的應用,又能夠使應用程式開發遵循同樣的架構API,因此提供主動性架構API是ANDROID 架構的特徵,也是目前大多數架構普遍採用的方式,如J2EE架構、NET架構。

        Android 架構提供的四大基本組件:

     Activity: Android 應用程式的UI(User Interface)組件,3.0以上版本又增加了Fragment。Fragment附屬和依賴於Activity,作用象一個"sub activity",可以帶有自己的UI,在Activity運行期間也可以具有自己獨立的生命週期( 增加刪除), 能夠接收輸入事件.能夠在不同的Activity中 重用。

     Service: 非UI功能的幕後處理組件。

    Broadcast receiver: 可隨時被啟動來處理Intent,並執行其任務的組件。

     Content provider: 實現跨程式的共用資料之組件,提供應用程式用到的資料來源。

       活動和服務是主要的運行組件,架構為兩者通過IOC機制提供生命週期鉤子,並在基類中提供了預設實現,鉤子由架構來調用,應用程式通過派生基類,重新實現鉤子回呼函數,實現應用程式的客制化。

        活動的基類為activity ,服務的基類為SERVICE ,兩者都提供了鉤子的預設實現。

         兩者都派生自Context,具體類圖如下:

  

        這裡採用的是Bridge模式,ContextImpl是Context虛擬類的實作類別,提供與架構互動的功能,如啟動另外的活動或服務,登記廣播接收器和發送廣播,獲得系統服務管理介面。ContextWrapper是對ContextImpl類的封裝,SERVICE類和Activity類都是ContextWrapper的衍生類別,SERVICE類直接派生自ContextWrapper,Activity間接派生自ContextWrapper的子類ContextThemeWrapper,SERVICE類和Activity類分別在ContextWrapper和ContextThemeWrapper類的介面基礎上添加和實現了各自的生命週期回調介面(鉤子),ContextThemeWrappe的功能是在ContextWrapper基礎上添加了Them的支援及在通過getSystemService介面返回服務管理對象時對於LAYOUT_INFLATER_SERVICE服務做了特殊處理,採用原形模式返回一個LayoutInflater對象的複製對象。

        Activity提供的鉤子,每一個對應一個生命週期狀態,onCreate(活動建立時調用),onStart(活動將要顯示時調用),onResume( 活動已經處於可視狀態時調用),onPause(另一個活動獲得焦點,本活動將要暫停時調用),onStop(活動停止時不再可視時調用),onDestroy(活動將要釋放時調用).

       回調介面實現例子:

      @Override

      public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);//繼承預設實現

             // 在此添加新的功能

     }

 

 

                                       活動的完整生命週期

      而Fragment至少需要實現如下三個回調:

      onCreate()

             建立fragmet時調用;

     onCreateView()

            在fragmet首次顯示時調用,在該回調中實現fragmet與布局視圖的綁定,並返回對應fragmet布局的根視圖,如果fragmet沒有UI,返回NULLL。

     onPause()

            使用者離開fragmet時調用。

     其它可以實現的回調:

     onAttach(Activity activity)

           當fragment 與activity綁定時調用

     onActivityCreated()

           當活動的onCreate()返回時調用。

     onDestroyView()

           當與fragment 綁定的視圖被移走時調用。

     onDetach()

          當fragment與活動Detach時調用

    onDestroy()

          當fragment釋放後調用

       另外還有onStart(),onStop(),onResume(),onPause(),這些介面都與綁定的活動對應的狀態對應,在綁定的活動相應狀態回調介面調用時同時也被調用。

下面是Fragment與附屬的Activity生命週期的對應圖

 

        服務的提供的鉤子回調介面包括onCreate(服務建立時調用),onStartCommand(使用者通過startService啟動服務,服務將啟動時調用),onBind(客戶通過調用bindService將要綁定到服務時調用,該介面返回一個BINDER對象給客戶,客戶使用該BINDER對象與綁定服務通訊),onUnbind(客戶通過調用unbindService已經與服務去綁定時調用),onRebind(客戶通過unbindService與服務去綁定,然後重新bindService時調用),onDestroy(服務不再使用被釋放時調用)。

 

 

              服務生命週期圖形

 

         架構為廣播接收器組件BroadcastReceiver及內容提供者ContentProvider組件提供了虛擬基類,應用程式需要實現他們的衍生類別. 廣播組件只有一個介面需要在衍生類別中實現--onReceive介面(收到訊息時由架構調用)。而內容提供者組件至少需要在衍生類別中實現onCreate介面(建立時由架構調用) , query介面(用來資料記錄查詢),getType介面(返回給定URI對應資料的MIME類型),update介面(更新資料記錄用),insert介面(插入資料記錄),delete介面(刪除資料記錄),這些介面除了onCreate由架構調用外其它都有客戶調用,這是內容提供者組件與其它組件不一樣的地方。

                                                                       歡迎轉載,轉載時請尊重原創註明出處。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.