亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        MVVM架構(gòu)在Android開發(fā)中的應(yīng)用

        2020-11-24 17:40:34潘鳳江蘇聯(lián)合職業(yè)技術(shù)學(xué)院淮安生物工程分院
        數(shù)碼世界 2020年3期
        關(guān)鍵詞:界面

        潘鳳 江蘇聯(lián)合職業(yè)技術(shù)學(xué)院淮安生物工程分院

        一、引言

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

        二、概述

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

        1.各層級低耦合

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

        2.雙向綁定、數(shù)據(jù)驅(qū)動

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

        3.團隊協(xié)作,提高效率

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

        4.可復(fù)用性

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

        5.易于測試

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

        6.優(yōu)化代碼

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

        三、應(yīng)用

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

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

        2.搭建ViewModel層。ViewModel層主要負責(zé)業(yè)務(wù)邏輯的處理,持有ObservableField等View層所需要的數(shù)據(jù)對象,還有Model層的對象。通過Model層對象調(diào)用接口獲取數(shù)據(jù),獲取數(shù)據(jù)成功后給ObservableField等數(shù)據(jù)對象賦值,一旦數(shù)據(jù)的值發(fā)生變化后,View層對應(yīng)的頁面就會刷新。

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

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

        1.ViewModel組件

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

        2.LiveData 組件

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

        3.Room 組件

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

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

        四、結(jié)束

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

        猜你喜歡
        界面
        聲波在海底界面反射系數(shù)仿真計算分析
        微重力下兩相控溫型儲液器內(nèi)氣液界面仿真分析
        國企黨委前置研究的“四個界面”
        當代陜西(2020年13期)2020-08-24 08:22:02
        基于FANUC PICTURE的虛擬軸坐標顯示界面開發(fā)方法研究
        西門子Easy Screen對倒棱機床界面二次開發(fā)
        空間界面
        金秋(2017年4期)2017-06-07 08:22:16
        鐵電隧道結(jié)界面效應(yīng)與界面調(diào)控
        電子顯微打開材料界面世界之門
        人機交互界面發(fā)展趨勢研究
        手機界面中圖形符號的發(fā)展趨向
        新聞傳播(2015年11期)2015-07-18 11:15:04
        精品国内日本一区二区| 中年人妻丰满AV无码久久不卡| 中文岛国精品亚洲一区| 澳门精品一区二区三区| 女色av少妇一区二区三区| 亚洲国产精华液网站w| 亚洲肥老熟妇四十五十路在线| 中国免费av网| sm免费人成虐漫画网站| 丁香婷婷激情视频在线播放| 久久伊人网久久伊人网| 伊人色综合久久天天人手人停| 中出高潮了中文字幕| 清纯唯美亚洲经典中文字幕| 久久综合九色欧美综合狠狠| 天码人妻一区二区三区| 亚洲精品中国国产嫩草影院美女| 中文字幕久久人妻av| 日韩精品熟妇一区二区三区| 亚洲小说区图片区另类春色| 久久国产品野战| 在线观看视频国产一区二区三区| 久久国产精品一国产精品金尊| 成人性做爰aaa片免费看| 国内自拍偷拍亚洲天堂| 日本高清视频一区二区| 成视频年人黄网站免费视频| 理论片87福利理论电影| 国产精品18久久久久久首页| 极品粉嫩嫩模大尺度视频在线播放| 人妻精品久久久久中文字幕69| 中文字幕人妻丝袜美腿乱| 免费国产调教视频在线观看| 国内免费自拍9偷1拍| 久久精品国产久精国产果冻传媒| 色综合天天网| 亚洲色图第一页在线观看视频| 漂亮人妻洗澡被公强 日日躁| 无码人妻丰满熟妇区五十路百度| 亚洲精品自拍视频在线观看| 国产精品国产三级国产剧情|