Android真的推荐用MVI模式?MVI和MVVM有什么区别?
android自己卷自己,自己造一个MVI架构模式吗?
MVI架构模式是国内android开发者最近一两年造出来的吗?
看了很多MVI的资料,发现都提到cycle.js框架。android的mvi架构就是启发于cycle.js框架。
我们再看看Cycle.js框架是什么时候开始的,又是什么时候开始使用MVI模式的。
Cycle.js框架 第一个预发版本 :
https://github.com/cyclejs/cyclejs/releases?page=6
再结合官方文档来看,Cycle.js框架就是为了MVI架构模式而生的。
虽然不知道,Cycle.js框架是不是首个MVI模式框架。
但是从很多资料可以推测,MVI架构模式就是Cycle.js框架推广开来的。
而且早在2014年就已经在前端开发中用得飞起了。
想想2014年,咱们在干嘛?android在用什么架构模式。
正所谓,天下武功出少林啊。
我们android的很多技术,在前端早就用“烂了”。
我们知道MVP和MVVM的爹都是MVC。MVI的爹也是MVC。
MVC的Controller是命令是编程组件,不能直接实现响应式编程思想。
响应式编程范式(Reactive programming):
安卓官方的compose框架、微信小程序、Flutter、React、鸿蒙UI的开发框架,都是使用响应式开发框架。
这里就不拓展开来讲了,上面提到的任何一个开发框架,你只要会一个基本就能理解响应式编程范式。
如果一个都不会也没关系,现在不理解响应式编程也没关系,等你学会MVI就理解了,这种只有实际使用过才能深刻理解。
学不会也没关系,不要焦虑(尤其那些工作不久的小伙伴,学不会属于正常现象~)
MVI,咱第一遍学不会,就等2年,再学一遍~
2年后也没学会,那就再等2年~ 一定要有耐心~
如果还是学不会,那也没关系,因为MVI早晚也会过时~ 等过时了就不用学了~
哈哈哈~ 别笑,正经Android可不会开玩笑的。
就像rxjava,当年有多少人死活学不会,android开发现在谁还学Rxjava?哈哈哈~
用一张图来总结这次升级的核心思想:
新版架构指南在旧版的基础上,做了如下调整和建议:
1. 将LiveData组件改成了StateFlow
对协程的使用更友好。并且更能体现面向数据流开发的思想。
实际上,依然使用LiveData也没毛病。
2. ViewModel传递给View的数据限制为View的UIState
ViewModel从Model层获取数据后,转换为UIState数据,通过StateFlow流向View层。
UIState的数据面向界面组件而定义的,是能直接控制View组件如何显示的数据。
所以我们也可以称UIState为界面的状态或者View的状态。
如下:
3. 单数据流还是多数据流的选择
官方指南并没有强制我们使用单流。
同一个界面应该使用单个StateFlow还是多个StateFlow,需要我们自己判断。
我们应该根据UIStates数据们之间关联程度来决定多流还是单流。
单流优缺点都十分明显:
优点: 数据集中管控,会提高代码的可读性和修改的便利性。
缺点: 当数据非常多且复杂时,会影响效率。因为我们没有diff功能,View层不能只更新有变化的数据,只会根据UIState刷新当前界面。
https://developer.android.com/jetpack/guide/ui-layer#additional-considerations
我们再看下官方新版架构图:
当然不仅仅MVVM可以改造成响应式开发范式,MVP也是可以的。
不信你看 这篇blog :
https://www.raywenderlich.com/817602-mvi-architecture-for-android-tutorial-getting-started
1. 理解MVC架构模式的思想【MVC是其他架构模式之爹,他的思想是MVP、MVVM、MVI的基础,学会它是关键步骤~】。
3. 学习kotlin的StateFlow组件,的使用:Sequence->Flow->StateFlow。
4. 学习ViewModel组件的使用(虽然不用ViewModel也能实现MVI架构,但是ViewModel还是值得学习)。
5. 理解DRY(Don't Repeat Yourself)原则。
6. 理解MVVM(因为官方的MVI模式是基于MVVM的基础改造的~)。
7. 学习官方架构指南。
8. 实战。
在这里就分享一份由大佬亲自收录整理的 学习PDF+架构视频+面试文档+源码笔记 , 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
当然,你也可以拿去查漏补缺,提升自身的竞争力。
真心希望可以帮助到大家,Android路漫漫,共勉!
如果你有需要的话,只需 私信我【进阶】即可获取
绛旓細1. 鐞嗚ВMVC鏋舵瀯妯″紡鐨勬濇兂銆怣VC鏄叾浠栨灦鏋勬ā寮忎箣鐖癸紝浠栫殑鎬濇兂鏄疢VP銆丮VVM銆MVI鐨勫熀纭锛屽浼氬畠鏄叧閿楠銆戙3. 瀛︿範kotlin鐨凷tateFlow缁勪欢锛鐨勪娇鐢锛歋equence->Flow->StateFlow銆4. 瀛︿範ViewModel缁勪欢鐨勪娇鐢紙铏界劧涓嶇敤ViewModel涔熻兘瀹炵幇MVI鏋舵瀯锛屼絾鏄疺iewModel杩樻槸鍊煎緱瀛︿範锛夈5. 鐞嗚ВDRY锛圖on't Repeat ...
绛旓細VRS锛屽叏绉颁负鈥淰irtual Reality System鈥濓紝鍗斥滆櫄鎷熺幇瀹炵郴缁熲濓紝鏄竴绉嶉氳繃璁$畻鏈烘妧鏈瀯寤虹殑鍏ㄦ柊浣撴劅浣撻獙銆俈RS閫氳繃妯℃嫙浜虹被瑙嗗惉銆佸梾瑙夈佽Е瑙夌瓑鎰熷畼锛浣跨敤鎴峰彲浠ュ湪铏氭嫙涓栫晫涓笌璁$畻鏈虹敓鎴愮殑鐗╀綋杩涜浜や簰锛屽苟涓斿彲浠ヤ骇鐢熶竴瀹氱殑韬綋鎰熻锛屼粠鑰屽疄鐜颁汉鏈轰簰鍔ㄤ笌娌夋蹈寮忎綋楠屻MVI锛屽嵆鈥淢odel-View-Intent鈥濓紝鏄竴绉嶅父鐢ㄧ殑...
绛旓細鏈杩戝湪鎴戠殑 Android 椤圭洰涓篃鍑嗗搴旂敤 MVI 鏉ユ浛鎹㈠師鏈夌殑 MVP 銆 MVI 鍜 MVP 鐨勪笉鍚屼箣澶勫氨鏄紝鍦 MVP 涓 V 涔熷氨鏄鍥惧眰鍗宠礋璐f覆鏌撶晫闈㈠憟鐜扮粰鐢ㄦ埛锛屽張璐熻矗鍜岀敤鎴风殑浜や簰锛岃屽湪 MVI 灏 V 鐨勮繘琛屾媶鍒嗕负 view 涓哄睍鐜拌鍥惧拰 intent 涓虹敤鎴蜂氦浜掋傝屼笖寮曞叆浜嗙敤鎴枫傝屼笖鍦 MVI 涓篃寮曞叆鐢ㄦ埛锛岃繖鏍蜂竴...
绛旓細鎬荤殑鏉ヨ,MIUI 11纭疄閫氳繃鏇寸畝鍗,鏇翠护浜烘剦鎮︾殑鍒锋柊璁捐鏉ヤ紭闆呭湴瀹屽杽浜嗗皬绫崇殑Android澶栬,骞朵负鐢垫睜瀵垮懡鍜屽叾浠栨煇浜涘姛鑳芥彁渚涗簡涓浜涘叧閿殑鏀硅繘,杩欎簺鍔熻兘鏋勬垚浜嗙粷浣崇殑杩唬鏁堟灉,铏界劧涓嶆槸寰堝畬缇,浣嗚繕鏄尯濂界敤鐨勩 MIUI鐨勪紭鐐: 1.娴佺晠,鏃ュ父浣跨敤鏃犲崱椤裤 2.璺熸墜,鎿嶄綔鎰熻姣旇緝椤虹晠銆 3.棰滃艰緝楂,鍏嶈垂涓婚鍩烘湰鏄叏灞,鏁翠釜绯...
绛旓細鏂版槦鎵嬫満瑙嗛鏍煎紡杞崲鍣ㄦ槸涓娆捐兘澶熷府鍔╃敤鎴峰揩閫熷皢瑙嗛杞崲鎴愭墜鏈鸿澶囨墍鏀寔鐨勬牸寮忥紝瀹冨叿鏈夎浆鎹㈠揩閫熴佹搷浣滅畝鍗曠瓑鐗圭偣锛岃杞欢鑳藉鏀寔鐩墠鎵鏈夋祦琛岀殑鍚勭闊抽鍜岃棰戞枃浠舵牸寮忥紝骞惰兘鎶婂悇绉嶆祦琛岀殑瑙嗛鍜岄煶棰戣浆鎹负鎮ㄩ渶瑕佺殑Android锛宨phone锛宨pad锛3GP绛夈傛柊鏄熸墜鏈鸿棰戞牸寮忚浆鎹㈠櫒鏀寔瀵煎叆鍑犲崄绉嶅父瑙併佷笉甯歌鐨勮棰戞牸寮忥紝...
绛旓細Android瀹夊崜鎵嬫満鏍煎紡锛歋amsung Galaxy Tab, HTC Evo 4G, Motorola Droid X, Samsung Galaxy S锛孷ibrant/Epic 4G/Fascinate/Mesmerize…锛 Amazon Kindle Fire, Nook Tablet MP4鏍煎紡璁惧锛歅SP, Archos, Creative Zen, iRiver, etc.Windows 7鎵嬫満鏍煎紡锛歋amsung Focus, HTC Surround, LG Quantum, HTC...
绛旓細姝ラ1锛氫笅杞藉畨瑁匳irtualBox 棣栧厛锛屾偍闇瑕佷笅杞藉苟瀹夎VirtualBox杞欢锛屽畠鏄竴涓紑婧愮殑铏氭嫙鏈鸿蒋浠讹紝鍙互鍦∕ac绯荤粺涓婅繍琛Android妯℃嫙鍣ㄣ傛偍鍙互鍦╒irtualBox鐨勫畼鏂圭綉绔欎笂鎵惧埌閫傜敤浜嶮ac鐨勫畨瑁呯▼搴忥紝骞舵寜鐓ф彁绀鸿繘琛屽畨瑁呫傛楠2锛氫笅杞紸ndroid妯℃嫙鍣ㄩ暅鍍 鎺ヤ笅鏉ワ紝鎮ㄩ渶瑕佷笅杞紸ndroid妯℃嫙鍣ㄧ殑闀滃儚鏂囦欢銆傜洰鍓嶆瘮杈冩祦琛岀殑Android...
绛旓細瀹夊崜鍘熺敓绯荤粺锛氳嚜鐢变笌瀹炵敤鐨勬潈琛 瀹夊崜锛Android锛夌殑鍘熺敓绯荤粺锛屽浜庝竴閮ㄥ垎浜烘潵璇达紝鐘瑰鑷敱鐨勮薄寰侊紝鏄粬浠拷姹傜畝娲佷笌鏁堢巼鐨勯閫夈傚師鐢烝ndroid锛屽氨鍍忎竴鍧楁湭琚洉鐞㈢殑鐜夌煶锛屼繚鐣欑潃Google鐨勫垵蹇冭璁★紝鐢ㄦ埛鍙互鏍规嵁鑷繁鐨勫枩濂借繘琛屼釜鎬у寲瀹氬埗锛屾瀯寤哄睘浜庤嚜宸辩殑鈥滃畾鍒剁増Android鈥濄傝繖绉嶇簿绁炲眰闈㈢殑鑷敱锛屽浜庨偅浜涘磭灏氫釜鎬у寲鍜...
绛旓細濡傛灉浣犲彧鎯冲畨瑁Android2.2鐨勬ā鎷熷櫒锛屽氨閫夋嫨SDK Platform Android 2.2. API 8, revision 2 涓嬭浇鍚庤蒋浠朵細鑷姩灏嗘ā鎷熷櫒瀹夎鍒android-sdk-windows鐩綍鍐呯殑锛屾棤闇鐢ㄦ埛鎿嶄綔锛岀劧鍚庣洿鎺ュ埌 Virtual Device new.. 杩欎竴姝ャ傞夋嫨瀹夎 (install Selected)涓嬭浇閫熷害涓嶆暍鎭淮锛屼綘瀹剁綉閫熷啀蹇篃鐧芥惌锛岀湡鏄お鎱簡!
绛旓細android寮鍙戠敤鐨勬槸Java璇█銆侸ava涔熸嫢鏈夎嚜宸卞己澶х殑寮婧愮ぞ鍖猴紝褰撶紪鍐欐椂閬囧埌闂灏辫兘閫氳繃杩欎簺绀惧尯鎵惧埌绛旀銆俛ndroid寮鍙戠殑鏁欑▼锛屼功绫嶅拰璇剧▼锛屽寘鎷厤璐瑰拰浠樿垂鐨勶紝杩欎簺鏁欑▼鍙互璁╁厛鐢╦ava璇█寮濮嬪叆闂Android寮鍙戜箣璺侫ndroid浠g爜锛岀ず渚媎emo 鍜孉pp閮芥槸鐢↗ava缂栧啓鐨勶紝浣跨敤Java鐨勫紑鍙戣呮洿瀹规槗杞负Android寮鍙戣咃紝杩欏湪涓...