999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

MVVM架構在Android開發中的應用

2020-11-24 17:40:34潘鳳江蘇聯合職業技術學院淮安生物工程分院
數碼世界 2020年3期
關鍵詞:界面

潘鳳 江蘇聯合職業技術學院淮安生物工程分院

一、引言

從功能手機到智能手機,從3G到4G再到如今的5G,手機中的APP越來越豐富,提供的功能越來越強大,涉及的領域越來越廣。在這背后,離不開移動生態和APP開發技術的不斷發展。在移動端操作系統市場中,Android操作系統占比超過了百分之七十。這幾年來,Android操作系統在不斷地迭代更新,同時,Android應用架構也不斷發展。最初的一代架構是MVC,但是Activity過于臃腫;為了解決該問題,出現了二代架構MVP,新增了presenter層,作為控制中心,分擔原來Activity中的部分功能,處理View于Model間的交互和業務邏輯;如今Android主流應用架構是MVVM,MVVM的出現解決了MVP架構中View層大量接口和實現類等問題,更加靈活高效。

二、概述

MVVM架構共分為三層:Model層、View層、ViewModel層。Model表示模型層,主要負責獲取視圖層所需要的數據,數據源通常是網絡和本地數據庫。View層是視圖層,主要負責界面的繪制和交互,Android項目的View層通常是XML和Activity;ViewModel層是視圖-模型層,主要負責業務邏輯的處理,串聯View層與Model層間,當Model層更改時,ViewModel層反饋給View層,引發頁面的刷新。Android項目中引入MVVM架構可以帶來以下幾點優勢。

1.各層級低耦合

MVVM架構中,數據模塊和界面模塊是相互獨立的,通過ViewModel建立關聯。單純從數據的角度來看,Model負責提供數據,ViewModel負責處理數據,View負責展示數據。View層想展示什么樣的樣式,完全由自己決定。如果View層的樣式發生變化,只要數據格式不變,那么ViewModel層和Model層就不需要做任何改動。如果Model數據源發生了變化,只要數據格式不變,那么View層也不需要做任何改動。而在MVC或者MVP架構中,當界面樣式改變時,可能就需要改變獲取控件的方式,改變更新界面的接口等等。

2.雙向綁定、數據驅動

在MVVM架構中,可以通過數據綁定框架實現數據和控件的雙向綁定,當數據改變時會自動驅動View層更新,View層控件改變時可以自動反饋到數據上,這樣ViewModel層可以專注于處理數據和業務邏輯,不需要去關注View層的邏輯,比如如何獲取用戶的輸入,如何更新界面,如何獲知用戶的交互事件等等。View層和ViewModel層之間通過數據進行串聯,一方改變都會自動影響另外一方。每一層只關注自己的事情,整個項目的結構非常清晰明了。

3.團隊協作,提高效率

在MVVM架構下,各層級之間的耦合程度很低,所以可以根據層級對整個項目進行劃分,進而明確地分工,這樣極大地提高了個人和整個團隊的開發效率。

4.可復用性

如果對于同一份數據,需要多種樣式進行展示,那么同一個ViewModel就可以供多個View使用。如果由于需求的變化導致樣式不斷變化,那么我們只需要更改對應的View層就可以了。

5.易于測試

由于ViewModel層和View層是相互獨立的,一個專注于數據和業務邏輯的處理,一個專注于界面的繪制和交互,那么開發人員在做單元測試的時候,可以對兩個層級分別進行測試,極大地方便了測試。

6.優化代碼

Android中findViewById等模式化代碼無需手動編寫,MVVM中的數據綁定框架可以直接完成該工作,極大地提高了工作效率,同時還可以提高XML布局文件的解析速度。

三、應用

2015 年谷歌在Google I/O上提出了Data Binding庫,目的是減少Android開發中的大量模板代碼(setText等),增加代碼及邏輯清晰度,提高開發效率和維護效率。同時,這也意味著,在Android開發中支持MVVM的開發模式,Data Binding可以使得數據對象直接綁定到XML布局文件中,數據發生變化時會直接反映到View上;View狀態發生變化時也會反應到數據上。Android項目中使用Data Binding搭建MVVM架構,需要以下幾個步驟:

1.利用Data Binding搭建View層。引入Data Binding框架后,XML布局文件和原始文件相比,增加了layout標簽和data標簽。data標簽用來綁定數據對象,這樣布局標簽就可以直接使用變量中的屬性。Activity中需要使用Data Binding綁定對應的布局文件和數據對象,數據對象需要實現Observable接口,這樣數據對象就有了更新通知能力,一旦數據層的對象發生變化,View層就會自動完成相應的變化。

2.搭建ViewModel層。ViewModel層主要負責業務邏輯的處理,持有ObservableField等View層所需要的數據對象,還有Model層的對象。通過Model層對象調用接口獲取數據,獲取數據成功后給ObservableField等數據對象賦值,一旦數據的值發生變化后,View層對應的頁面就會刷新。

Data Binding搭建的MVVM架構有很多優點,比如雙向綁定技術可以讓數據的一致性很好、增強了View層和ViewModel層聯動性、減少了很多模式化代碼、自動判空技術減少了低級錯誤的發生等等。但是,Data Binding框架也有一些缺陷,首先Data Binding框架對XML布局文件的侵入性比較大,增加了學習成本,同時還影響了XML布局文件的復用性;其次,由于XML布局文件無法進行調試,而數據綁定讓一部分邏輯轉移到了XML布局文件中,所以增加了代碼調式的難度,可能會出現BUG定位困難的情況。還有,Data Binding框架是基于數據驅動的,當某個模塊的業務邏輯比較復雜的時候,那么Model層的數據往往會比較大。但是數據只有在頁面銷毀的時候統一釋放,而不能根據View的生命周期釋放,所以總的來說,項目占用的內存增大了。

在這之后,谷歌在2017年Google I/O大會上宣布了一個全新的架構組件Android Architecture Components,我們后面簡稱AAC。Google官方對該框架的說明是:這是一個幫助構建穩定,易于測試和易于維護的App架構的庫。該框架主要包含ViewModel、LiveData、Room三個核心組件。

1.ViewModel組件

在以往的項目架構中,由于沒有ViewModel這一層,所以相關數據都存儲在Activity或者Fragment中,而Activity和Fragment都有自己的生命周期,在特殊的情況下會發生銷毀或者重新創建,這時候存儲在Activity或者Fragment中的數據會隨著頁面的銷毀而消失,雖然Activity 可以使用 onSaveInstanceState方法存儲和恢復相關的數據,但是這只適用于少量的數據。AAC框架中的ViewModel組件很好地解決了這個問題,ViewModel組件旨在以注重生命周期的方式存儲和管理界面相關的數據,它能夠承擔保存數據的責任,把數據從界面中分離出來。同時,ViewModel也有自己的生命周期,和Activity、Fragment等組件的生命周期相匹配,這樣當遇到界面銷毀重建的情況時能夠很好地保存數據,然后及時地恢復到界面上。

2.LiveData 組件

LiveData 能夠感知Activity、Fragment等組件的生命周期。當Activity等組件銷毀時,LiveData也會被退訂,這樣就有效地避免部分內存泄露問題。LiveData組件把View層和ViewModel層串聯了起來,一旦數據發生了變化,就會通知View層,界面便會做出響應。

3.Room 組件

Room組件是在Android本地數據庫基礎上封裝的一個組件,可以提供強大的數據庫功能。Room組件在MVVM架構中不是必須的,可以根據自己項目的需求選擇。

我們利用AAC框架可以很輕松地搭建一個MVVM架構的項目。搭建流程主要是:ViewModel組件作為MVVM架構中的ViewModel層,Activity和XML布局文件作為View層,LiveData作為可觀察的數據存儲器類在ViewModel層被創建,在View層中被觀察,從而完成View層和ViewModel層的綁定。對比單純Data Binding框架搭建的MVVM架構,AAC框架更加地完善和合理,對于Android開發者來說更加地友好。當然,也可以在AAC框架的基礎上結合Data Binding框架,這需要根據項目的具體情況進行考量。

四、結束

總的來說,架構的引入目的是為了使項目結構更加合理,一個合理的架構可以使項目模塊內部高聚合、模塊之間低耦合。在項目開發的過程中,可以讓開發人員只需要專注于某個模塊或者某個業務,分工更加地合理,極大提高個人開發效率和團隊的開發效率。架構的引入往往并不意味著代碼量的減少,甚至可能會使代碼量增多,因為我們引入項目架構的目的是為了項目在邏輯上更簡單,讓整個項目的質量、可擴展性、可維護性等得到提高。MVVM架構的諸多優點可以讓項目穩健性更強、可測試性更好、可維護性更高。

猜你喜歡
界面
聲波在海底界面反射系數仿真計算分析
微重力下兩相控溫型儲液器內氣液界面仿真分析
國企黨委前置研究的“四個界面”
當代陜西(2020年13期)2020-08-24 08:22:02
基于FANUC PICTURE的虛擬軸坐標顯示界面開發方法研究
西門子Easy Screen對倒棱機床界面二次開發
空間界面
金秋(2017年4期)2017-06-07 08:22:16
鐵電隧道結界面效應與界面調控
電子顯微打開材料界面世界之門
人機交互界面發展趨勢研究
手機界面中圖形符號的發展趨向
新聞傳播(2015年11期)2015-07-18 11:15:04
主站蜘蛛池模板: 亚洲国产一成久久精品国产成人综合| 免费全部高H视频无码无遮掩| 国产精品人成在线播放| 72种姿势欧美久久久久大黄蕉| 国产97视频在线| 欧美激情视频一区二区三区免费| 亚洲天堂在线免费| 亚洲国产天堂久久综合| 国产精品一区二区久久精品无码| 好吊妞欧美视频免费| 国产日韩欧美在线播放| 亚洲中文字幕在线一区播放| 久久亚洲高清国产| 女人天堂av免费| 伊人色在线视频| 精品国产福利在线| 国产成年女人特黄特色毛片免| 中日韩欧亚无码视频| 国产在线观看精品| 18禁不卡免费网站| 国产精品久久自在自2021| 一级全免费视频播放| a毛片基地免费大全| jizz国产视频| 久久亚洲国产视频| 国产精品99久久久久久董美香| 国产裸舞福利在线视频合集| 国产成人资源| 人妻少妇乱子伦精品无码专区毛片| 午夜福利无码一区二区| 国产成人亚洲欧美激情| 国产小视频免费| 精品欧美视频| 成人国产小视频| 日韩区欧美国产区在线观看| 婷婷六月天激情| 9啪在线视频| 亚洲精品自拍区在线观看| 狠狠色狠狠色综合久久第一次| 久久成人18免费| 国产成人夜色91| 亚洲日韩AV无码一区二区三区人| 国产精品人人做人人爽人人添| m男亚洲一区中文字幕| 国产成人你懂的在线观看| 亚洲无码精品在线播放| 成人精品区| 久久综合亚洲鲁鲁九月天| 乱人伦99久久| 视频二区中文无码| 亚洲天堂日本| 园内精品自拍视频在线播放| 国产成年无码AⅤ片在线 | 亚洲无码91视频| 九九九精品成人免费视频7| 亚洲国产亚洲综合在线尤物| 久久福利网| 欧美日韩中文国产va另类| 国产xx在线观看| 久久婷婷六月| 精品视频免费在线| 国产97视频在线| 激情国产精品一区| 国模私拍一区二区| 精品欧美视频| 99视频在线免费| 尤物国产在线| 亚洲欧洲综合| 精品国产自| 丝袜高跟美脚国产1区| 亚洲综合第一区| 青青草原国产av福利网站| 99re在线观看视频| 日韩精品成人网页视频在线| 婷婷综合在线观看丁香| 人人艹人人爽| 精品视频在线观看你懂的一区| 久久久久免费精品国产| 亚洲成aⅴ人片在线影院八| 狠狠操夜夜爽| 欧美在线精品怡红院| 亚洲男人天堂2020|