databinding雙向綁定原理,Android程序員最新職業規劃

1. Android架構設計模式

  • MVC架構設計模式:MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫。
  • MVP架構設計模式:MVC全名是Model View Persenter,MVP由MVC演變而來,是現在主流的開發模式。
  • MVVM架構設計模式:MVVM全名是Model-View-ViewModel,它本質上就是MVC的改進版。

各種模型的**主要目的**都是是分離視圖(View)和模型(Model),即將UI界面顯示和業務邏輯進行分離。

1.1 架構設計模式-MVC

(1) 定義:

在android開發過程中,比較流行的開發框架曾經采用的是MVC框架模式。

  • M(Model)層:實體模型,處理業務邏輯。如:數據庫操作,網絡操作,I/O操作,復雜操作和耗時任務等。
  • V(View)層:處理數據顯示。在Android開發中,它一般對應著xml布局文件。
  • C(Controller)層:處理用戶交互。在Android開發中,它一般對應著Activity/Feagment。android中主要通過activity處理用戶交互和業務邏輯,接受用戶的輸入并調用Model和View去完成用戶的需求。

(2) 特點

  • 低耦合
  • 可重用易拓展
  • 模塊職責劃分明確

(3) 實例

android本身的設計結構符合 MVC 模式。

(4) MVC優缺點

  • MVC的優點:MVC模式通過Controller來掌控全局,同時將View展示和Model的變化分離開
  • MVC也有局限性:

View層對應xml布局文件能做的事情非常有限,所以需要把大部分View相關的操作移到Controller層的activity中。導致activity相當于充當了2個角色(View層和Controller層),不僅要處理業務邏輯,還要操作UI。一旦一個頁面的業務繁多復雜的話,activity的代碼就會越來越臃腫和復雜。

1.2 架構設計模式-MVP

MVP是從經典的MVC模式演變而來,它們的基本思想有相通的地方:Controller/Presenter負責邏輯的處理,Model提供數據,View負責顯示。在Android開發中,MVP的具體實現流程是當Presenter接收到View的請求,便從Model層獲取數據,將數據進行處理。處理好的數據再通過View層的接口回調給Activity或Fragment。這樣MVP能夠讓Activity或Fragment成為真正的View,只做與UI相關的事而不處理其他業務流程。

(1) 定義

  • M(Model)層:實體模型,處理業務邏輯。如:數據庫操作,網絡操作,I/O操作,復雜操作和耗時任務等。
  • V(View)層:負責View的繪制以及與用戶交互。在Android開發中,它一般對應著xml布局文件和Activity/Fragment
  • P(Presenter)層:負責完成Model層和View層間的數據交互業務邏輯

(2) 實例

(3) MVC和MVP的區別

MVP中的View并不直接使用Model,它們之間的通信是通過Presenter來進行的,所有的交互都發生在Presenter內部,而在MVC中View會直接從Model中讀取數據而不通過Controller

  • MVC和MVP的最大區別:MVC的Model層和View層能夠直接交互;MVP的Model層和View層不能直接交互,需通過Presenter層來進行交互。
  • Activity職責不同:Activity在MVC中屬于Controller層,在MVP中屬于View層,這是MVC和MVP很主要的一個區別。可以說Android從MVC轉向MVP開發也主要是優化Activity的代碼,避免Activity的代碼臃腫龐大
  • View層不同:MVC的View層指的是XML布局文件(或用Java自定義的View);MVP的View層是Activity(或Fragment)
  • 控制層不同:MVC的控制層是Activity(或Fragment);MVP的控制層是Presenter,里面沒有很多的實際東西,主要負責Model層和View層的交互。

(4) MVP優缺點

  • MVP的優點如下:

模型與視圖完全分離,我們可以修改視圖而不影響模型;項目代碼結構清晰,一看就知道什么類干什么事情;我們可以將一個Presenter用于多個視圖,而不需要改變Presenter的邏輯,這個特性非常的有用,因為視圖的變化總是比模型的變化更頻繁 ;協同工作(例如在設計師沒出圖之前可以先寫一些業務邏輯代碼)

  • MVP也有不足之處:

接口過多,一定程度影響了編碼效率。一定程度上導致Presenter的代碼量過大。
為了降低Presenter中業務繁多的問題,Google又推出了MVVM,試圖通過數據驅動來減少Presenter的代碼量。

1.3 架構設計模式-MVVM

(1) 定義

  • M(Model)層:仍然是實體模型(但是不同于之前定義的Model層),主要負責數據獲取、存儲和變化,提供數據接口供 ViewModel 層調用。
  • V(View)層:對應Activity/Feagmentxml布局文件 ,負責View的繪制以及與用戶交互
    說明:View層僅能操作UI(數據綁定來實現 UI 更新);不能做任何和業務邏輯有關的數據操作
  • VM(ViewModel)層:負責完成Model層和View層間的數據交互業務邏輯
    說明:ViewModel層僅能做和業務邏輯有關的數據操作;不能做UI相關的操作

2. android插件化

插件化來由:隨著業務的增多,業務邏輯代碼越來越多,apk包也逐漸增大,不利于維護和升級。通過插件化開發可將功能模塊解耦,不同的維護團隊僅維護某模塊的業務,同時當app升級時可僅對某功能模塊進行升級而不需整體升級。

2.1 插件化要解決的問題—如何動態加載a

《安卓學習筆記總結+最新移動架構視頻+大廠安卓面試真題+項目實戰源碼講義》瀏覽器打開

完整開源項目:docs.qq.com/doc/DSkNLaERkbnFoS0ZF

pk

(1) android類加載器及區別

類加載器作用:java字節碼通過類加載器加載到java虛擬器。

  • PathClassLoader:僅能加載文件目錄下的apk。
  • DexClassLoader:可以加載apk文件中的字節碼(從dex實體jar文件中加載java字節碼)。主要用于動態加載和代碼熱更新等。

(2)反射: java中的反射使我們在運行時獲得這個類的屬性、方法和class內部的信息機制,最重要的是我們可以在運行時實例化這個對象調用方法,這也是java反射的最大優點。
(3) 實現動態加載apk

什么是動態加載apk:android中有一個速度程序會主動到指定的sd卡中去加載apk,并通過代理activity去執行。

實現:需要一個代理activity去執行apk中的activity,主要通過反射去獲得它的屬性和方法,從而進行apk的調用。
實現原理:類加載器(加載類)+反射(獲取屬性和方法)+動態代理(執行)

最后

在這里我和身邊一些朋友特意整理了一份快速進階為Android高級工程師的系統且全面的學習資料。涵蓋了Android初級——Android高級架構師進階必備的一些學習技能。

附上:我們之前因為秋招收集的二十套一二線互聯網公司Android面試真題(含BAT、小米、華為、美團、滴滴)和我自己整理Android復習筆記(包含Android基礎知識點、Android擴展知識點、Android源碼解析、設計模式匯總、Gradle知識點、常見算法題匯總。)

ndroid復習筆記(包含Android基礎知識點、Android擴展知識點、Android源碼解析、設計模式匯總、Gradle知識點、常見算法題匯總。)

[外鏈圖片轉存中…(img-8NIBoU1B-1709290070311)]

本文已被CODING開源項目:《Android學習筆記總結+移動架構視頻+大廠面試真題+項目實戰源碼》收錄

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712416.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小工具——抖音短視頻評論自動同步

很多時候喜歡看抖音的評論,有時候評論也是一個查疑解惑的好地方,很多人也喜歡把抖音的評論集中起來做分析。 因為一個朋友問過我這回事,閑著的時候也研究了下抖音,所以自己做了個小工具,自動同步你觀看的抖音短視頻的…

Gophish+EwoMail 自建釣魚服務器

GophishEwoMail 自建釣魚服務器 文章目錄 GophishEwoMail 自建釣魚服務器1.前提準備2.搭建EwoMail郵件服務器1)Centos7 防火墻操作2)設置主機名3)host配置4)安裝EwoMail5)獲取DKIM6)端口服務介紹7&#xff…

黑馬JavaWeb課程中安裝vue腳手架出現的問題

1 安裝node.js 要想前端工程化,必須安裝node.js,前端工程化的環境。 在成功安裝node.js后, 修改全局包安裝路徑為Node.js安裝目錄, 修改npm鏡像源為淘寶鏡像源,這里出現第一個問題,視頻中給的淘寶鏡像為&…

OnlyOffice Document Server部署的步驟和詳細解說

OnlyOffice Document Server是一個免費的開源辦公套件,支持在線查看和編輯Office文檔。要部署OnlyOffice Document Server,可以通過多種方式進行,包括使用Docker、手動安裝在Linux服務器上,或者直接安裝在Windows服務器上。 以下…

Maven-私服(黑馬學習筆記)

前面我們在講解多模塊開發的時候,我們講到我們所拆分的模塊是可以在同一個公司各個項目組之間進行資源共享的。這個模塊的資源共享,就需要通過我們接下來所講解的Maven的私服來實現。 首先我們先介紹一下什么是私服,以及它的作用是什么。再來…

力扣180 連續出現的數字

如何有效地識別在數據庫中至少連續出現三次的數字? 目錄 題目描述 解題思路 完整代碼 進一步探索 題目描述 表:Logs ---------------------- | Column Name | Type | ---------------------- | id | int | | num | varch…

2024最新EasyRecovery磁盤數據恢復軟件功能全面介紹

一、軟件概述 EasyRecovery磁盤數據恢復軟件是一款專業的數據恢復工具,旨在幫助用戶從各種存儲設備中恢復因各種原因丟失的數據。該軟件憑借其強大的恢復能力、操作簡便和高效穩定的性能,得到了廣大用戶的認可。 EasyRecovery-mac最新版本下載:https://…

數據庫的簡單了解及介紹

數據庫(Database) 1.其本質是一個文件系統。保存了一系列有組織的數據 2.根據數據的結構處理,存儲,管理數據的倉庫 3.隨著時代的發展,數據管理不再僅僅是存儲和管理數據, 漸漸成為用戶所需要的各種數據管理…

go 設置滾動日志

方案 通過 log/slog 實現結構化日志生成,這是go1.21中推出的新特性;通過 lumberjack 實現日志文件分割。 示例 package mainimport ("gopkg.in/natefinch/lumberjack.v2""log/slog""os""path/filepath" )fun…

工業人工智能需要注意的10件事

我們無法逃避人工智能這個風口,宣傳人工智能軟件的廣告鋪天蓋地,似乎每個供應商都在推出最新的工具包,每天都有關于 ChatGPT、Bard 等新用例的文章。似乎全世界都在說:你現在需要人工智能! 人工智能確實正在成為自動化…

Fabric V2.5 通用溯源系統——應用后端GIN框架部分設計

本節對Fabric V2.5 通用溯源系統的應用后端部分做一個簡單的介紹,包括目錄結構、文件作用、用戶注冊登錄與農產品信息上鏈過程介紹。此節內容免費發布在TrueTechLabs Fabric學習交流QQ群。 購買專欄前請認真閱讀:《Fabric項目學習筆記》專欄介紹 TrueTechLabs Fabric學習交流…

transformer--編碼器1(掩碼張量、注意力機制、多頭注意力機制)

編碼器部分: 由N個編碼器層堆疊而成每個編碼器層由兩個子層連接結構組成第一個子層連接結構包括一個多頭自注意力子層和規范化層以及一個殘差連接。第二個子層連接結構包括一個前饋全連接子層和規范化層以及一個殘差連接 掩碼張量 什么是掩碼張量 掩代表遮掩,碼…

Ansible的playbook的編寫和解析

目錄 什么是playbook Ansible 的腳本 --- playbook 劇本 實例部署(使用playbook安裝啟動httpd服務) 1.編寫一個.yaml文件 在主機下載安裝http,將配置文件復制到opt目錄下 運行playbook 在192.168.17.77主機上查看httpd服務是否成功開啟…

DolphinScheduler——蔚來汽車數據治理開發平臺的應用改造

目錄 一、業務痛點 二、應用現狀 三、技術改造 3.1 穩定性 3.1.1 滾動重啟黑名單機制精準路由 3.2 易用性 依賴節點優化 補數任務優化 多 SQL 執行 原文大佬的這篇基于調度系統的數據治理案例有借鑒意義,這里摘抄下來用作學習和知識沉淀。 一、業務痛點 蔚…

Dell R730 2U服務器實踐2:VMWare ESXi安裝

緣起 剛到手邊的一臺Dell R730是三塊硬盤raid0 ,把我驚出一身冷汗,準備把它們改組成raid1 或者raid5 。 但是舍不得里面的ESXi 8 ,尋找能否把raid0改成raid1 還不掉WSXi的方法,很遺憾沒有找到。那樣只能重裝ESXi了。 ESXi軟件下…

Linux系統上使用C語言創建線程

文章目錄 一、使用C代碼創建線程示例API 二、線程的相關知識2.1 線程 與 進程 的關系2.2 使用線程的理由 一、使用C代碼創建線程 使用pthread_create函數創建線程。 示例 示例&#xff1a;創建一個線程&#xff0c;其作用就是打印線程ID和傳入參數。 //demo1 #include <…

cookie和session對http的作用以及區別

HTTP協議本身是無法判斷用戶身份。所以需要cookie或者session。 1、什么是cookie&#xff1f; cookie 是由 Web 服務器保存在用戶瀏覽器上的文件&#xff08; key-value 格式&#xff09;&#xff0c;可以包含用戶相關的信 息。客戶端向服務器發起請求&#xff0c;就提取瀏覽器…

基于串流技術的p2p共享桌面共享方案

研究遠控有一定時間了&#xff0c;但真正落地運用的不多&#xff0c;所以也不太上心&#xff0c;平時也只是自己diy玩玩&#xff0c;遠程共享看看電視劇。 最近生成式ai大火&#xff0c;直接帶動了gpu應用的相關場景&#xff0c;相關場景&#xff0c;但gpu卡又貴&#xff0c;對…

[記錄]-cannot import name ‘prelu‘ from ‘lasagne.layers‘

問題&#xff1a;cannot import name prelu from lasagne.layers 現有版本&#xff1a;lasagne 0.1,需要更新版本&#xff0c;直接pip installLasagne0.2 目前還不行 需要去源碼下載 命令&#xff1a; pip install --upgrade https://github.com/Theano/Theano/archive/mas…

每日一題——LeetCode1556.千位分隔符

方法一 個人方法&#xff1a; 把n轉為字符串&#xff0c;逆序遍歷n&#xff0c;把n的每個元素加入res&#xff0c;每三次加入.&#xff0c;最后將res翻轉再轉為字符串即為符合題目要求的結果 var thousandSeparator function(n) {nlet res[],lenn.length-1for(let ilen;i>…