Android 中MVC例項之Activity,Window和View
MVC模式的簡單介紹:
除此之外,此模式通過對複雜度的簡化,使程式結構更加直觀。軟體系統通過對自身基本部份分離的同時也賦予了各個基本部分應有的功能。專業人員可以通過自身的專長分組:
- (控制器Controller)- 負責轉發請求,對請求進行處理。
- (檢視View) - 介面設計人員進行圖形介面設計。
- (模型Model) - 程式設計師編寫程式應有的功能(實現演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實現具體的功能)。
圖中實線表示方法呼叫,虛線表示事件
模型(Model) “資料模型”(Model)用於封裝與應用程式的業務邏輯相關的資料以及對資料的處理方法。“模型”有對資料直接訪問的權力,例如對資料庫的訪問。“模型”不依賴“檢視”和“控制器”,也就是說,模型不關心它會被如何顯示或是如何被操作。但是模型中資料的變化一般會通過一種重新整理機制被公佈。為了實現這種機制,那些用於監視此模型的檢視必須事先在此模型上註冊,從而,檢視可以瞭解在資料模型上發生的改變。(比較:觀察者模式(軟體設計模式))
檢視(View) 檢視層能夠實現資料有目的的顯示(理論上,這不是必需的)。在檢視中一般沒有程式上的邏輯。為了實現檢視上的重新整理功能,檢視需要訪問它監視的資料模型(Model),因此應該事先在被它監視的資料那裡註冊。
控制器(Controller) 控制器起到不同層面間的組織作用,用於控制應用程式的流程。它處理事件並作出響應。“事件”包括使用者的行為和資料模型上的改變。
Activity的生命週期圖如下所示:
除了與生命週期有關的方法外,還有若干其他接收使用者輸入的方法,比如onKeyUp,onKeyMultiple,etc. 這些輸入都可能會造成view的變化。 其實也就是MVC中的C了。View是什麼呢,其實也就是Android中的View類和Window做的事情,View is the base class for widgets, which are used to create interactive UI components,把多個View聚合起來,並按照某種方式組合後,由Window將其畫出來就是了,所以Android已經提供了MVC的C和V了,app的開發者就只需要提供M了,根據MVC的慣常用法,M會實現演算法,封裝對網路和資料庫的訪問等。從MVC的架構圖中,我們還看到C和M直接的關係是單向的,只是C發控制命令給M。
Event(事件)導致Controller改變Model或View,或者同時改變兩者。只要Controller改變了Models的資料或者屬性,所有依賴的View都會自動更新。類似的,只要Controller改變了View,View會從潛在的Model中獲取資料來重新整理自己。
不多說了,Activity不僅僅是MVC中的C,當它跟其他類配合工作時適用於其他的設計模式中的角色。這裡就不介紹了。
Reference
1. http://hi.baidu.com/xiaofanqing/item/8ad71c3fd40e810eceb9feb5
相關文章
- Android 中Activity,Window和View之間的關係AndroidView
- Activity、View、Window之間關係的分析View
- Activity啟動分析(二)--建立Window和ViewView
- Android自定義View之Window、ViewRootImpl和View的三大流程AndroidView
- 淺談MVC框架中View層的優雅設計及例項MVC框架View
- 底層剖析 Window 、Activity、 View 三者關係View
- Android在多個Activity之間共享一個ViewAndroidView
- Spring MVC之例項初體驗SpringMVC
- android UI結構 (1)Activity 與 WindowAndroidUI
- Activity、View、Window的理解一篇文章就夠了View
- View和Activity的生命週期View
- Android之ActivityAndroid
- Window、WindowManager、View 之間的關係View
- Android之Window和彈窗問題Android
- android view 自定義viewgroup 例項--螢幕滑動AndroidView
- 淺析Android動畫(一),View動畫高階例項探究Android動畫View
- Android開發中巧用Activity和FragmentAndroidFragment
- 探究 Android View 繪製流程,Activity 的 View 如何展示到螢幕AndroidView
- Activity轉換為View和把圖片轉換為ViewView
- spring mvc即mvc攔截器例項(1)SpringMVC
- ruby中的類例項變數和例項的例項變數變數
- whose view is not in the window hierarchy!View
- oracle中Window和Window GroupOracle
- Android之Activity全面解析Android
- Android Apt之Activity RouteAndroidAPT
- Android 中的 WindowAndroid
- Android之Window與WindowManagerAndroid
- Android之MVC模式AndroidMVC模式
- android 中Service 和activity之間的資料傳遞的幾種方法Android
- Android view中的requestLayout和invalidate方法AndroidView
- Android自定義View注意事項AndroidView
- View.findViewById()和Activity.findViewById()區別View
- android中activity全屏的方法Android
- Android之android:theme設定在Application 和 Activity的區別AndroidAPP
- 帶你徹底理解 Android 中的 Window 和 WindowManagerAndroid
- Android自定義view中,onDraw和onLayout對比AndroidView
- Android基礎之Activity全解析Android
- Android之Activity基類封裝Android封裝