編輯:關於Android編程
上一篇文章中我們講解了關於Android開發過程中常見的內存洩露場景與檢測方案。Android系統為每個應用程序分配的內存是有限的,當一個應用中產生的內存洩漏的情況比較多時,這就會導致應用所需要的內存超過這個系統分配的內存限額,進而造成了內存溢出而導致應用崩潰。在實際的開發過程中我們由於對程序代碼的不當操作隨時都有可能造成內存洩露。具體更多關於Android常見內存洩露與檢測的內容可參考我的上篇文章。
本文我們將講解Android開發中常常涉及到的MVC/MVP/MVVM等模式的基本概念。許多童鞋對Android開發中涉及到的MVC、MVP、MVVM這三種模式不是太清楚,我認為無論是MVC、MVP亦或者是MVVM都是一種代碼組織方式,通過這種代碼組織方式能夠讓代碼更有層次感,各個層次主要負責各自的工作,這樣降低了整個項目的代碼邏輯耦合度與可讀性。
下面對MVC、MVP、MVVM等設計模式逐一的做一下說明:
MVC開發模式:
MVC,即Model層,View層,Control層,在JAVAEE中MVC是一種經典的開發模型,下面是引用的一段對其的說明:
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。其中M層處理數據,業務邏輯等;V層處理界面的顯示結果;C層起到橋梁的作用,來控制V層和M層通信以此來達到分離視圖顯示和業務邏輯層。
簡單來講就是:
視圖(View):用戶界面
控制器(Controller):業務邏輯
模型(Model):數據保存
MVC它的數據流轉:
(盜用了一下網上的圖…)
用戶操作界面,View接受指令,View 傳送指令到 Controller,也就是從View層到Control層的箭頭所示
Controller 完成業務邏輯後,要求 Model 改變狀態,也就是從Control層到Model層的箭頭所示
Model 將新的數據發送到 View,用戶得到反饋,也就是從Model層到View層的箭頭所示
Android中MVC模式的體現:
其實Android開發的主要流程都是MVC模式的,比如我們常見的Activity+Layout+Model展示業務邏輯的模式,其中:
Activity - 對應著Controller層,主要是控制層,用於實現業務邏輯
Layout - 對應著View層,主要用於展示頁面
Model - 對應著Model層,主要是保存數據
MVC模式的優勢:
使用MVC模式降低了程序中的耦合度,使應用程序視圖層與Model層分離,減少了代碼之間的相互影響;
由於使用MVC模式降低代碼耦合度,因此可以很方便的擴展現有程序;
不同代碼模塊職責劃分明確,有利於代碼的維護與升級;
MVP開發模式:
MVP開發模式是MVC模式一種進階,MVP和MVC模型的主要區別是model層與View層不再發生關系而是通過Presenter層作為中間的樞紐。並且各個部分之間都是雙向關聯的;
簡單來講就是:
視圖(View):用戶界面
控制層(Presenter):業務邏輯(負責與View層和Model層雙向交互)
模型(Model):數據保存
MVP它的具體數據流轉是這樣的:
(盜用了一下網上的圖…)
用戶操作界面,View接收指令,View傳送指令到Presenter層,也就是從View層到Presenter層的箭頭所示
Presenter完成業務邏輯後,要求Model改變狀態,也就是從Presenter層到Model層的箭頭所示
Model狀態改變之後將結果返回給Presenter層,然後Presenter層在將結果反饋到View層,也就是從Model層到Presenter層,從Presenter層到View層的箭頭所示
在MVP裡,Presenter完全把Model和View進行了分離,主要的程序邏輯在Presenter裡實現。而且,Presenter與具體的View是沒有直接關聯的,而是通過定義好的接口進行交互,從而使得在變更View時候可以保持Presenter的不變。
MVP模式的優勢:
MPV開發模式與MVC開發模式有的優勢相似,都是降低了代碼的耦合度
使用MVP模式View層與Model層不在相互關聯,可以更高效地使用模型,因為所有的交互都發生在一個地方——Presenter內部
MVVM它的具體數據流轉是這樣的:
MVVM與MVP是相類似的,唯一的區別是,它采用雙向綁定(data-binding):View的變動,自動反映在 ViewModel,反之亦然。
簡單來講就是:
視圖(View):用戶界面
控制層(VM):業務邏輯(負責與View層和Model層雙向交互)
模型(Model):數據保存
(盜用了一下網上的圖…)
用戶操作界面,View接收指令,View傳送指令到Presenter層
ViewModel完成業務,改變Model層數據
Model狀態改變之後將結果返回該ViewModel層,然後ViewModel層自動更新View層顯示
這倆天讀Google關於Android下Media開發的Sample,Media相關類庫結構復雜,時序難以理解,所以操起個人最喜歡的“看代碼”工具
LruCache以鍵-值對的形式存儲(內部定義了一個LinkedHashMap)數據,通過new LruCache(int size)實例化,參數使指定分配給LruCac
BrokenLine控件: import java.text.SimpleDateFormat; import java.util.ArrayList;
一、基本使用要點回顧Volley框架在請求網絡圖片方面也做了很多工作,提供了好幾種方法.本文介紹使用ImageLoader來進行網絡圖片的加載. ImageLoader的