編輯:關於Android編程
項目MVP實現方式
這節我們就具體來看官方示例到底是如何實現mvp的。這裡我們先看下總體的輪廓,關於項目中業務代碼我們僅列出了任務詳情頁(taskDetail)的相關類,其他業務代碼類似。
基類
我們首先來看兩個Base接口類,BasePresenter與BaseView,兩類分別是所有Presenter與View的基類。
BasePresenter中含有方法start(),該方法的作用是presenter開始獲取數據並調用view中方法改變界面顯示,其調用時機是在Fragment類的onResume方法中。
BaseView中含方法setPresenter,該方法作用是在將presenter實例傳入view中,其調用時機是presenter實現類的構造函數中。
契約類
與筆者之前見到的所有mvp實現都不同,官方的實現中加入了契約類來統一管理view與presenter的所有的接口,這種方式使得view與presenter中有哪些功能,一目了然,維護起來也方便,實例如下
activity在mvp中的作用
activity在項目中是一個全局的控制者,負責創建view以及presenter實例,並將二者聯系起來,下面是activity中創建view及presenter的代碼
我們可以從上面看到整個創建過程,而且要注意的是創建後的fragment實例作為presenter的構造函數參數被傳入,這樣就可以在presenter中調用view中的方法了。
mvp的實現與組織
實例中將fragment作為view層的實現類,為什麼是fragment呢?有兩個原因,第一個原因是我們把activity作為一個全局控制類來創建對象,把fragment作為view,這樣兩者就能各司其職。第二個原因是因為fragment比較靈活,能夠方便的處理界面適配的問題。我們先看view的實現,我們只挑一部分重要的方法來看
上面可以看到setPresenter方法,該方法繼承於父類,通過該方法,view獲得了presenter得實例,從而可以調用presenter代碼來處理業務邏輯。我們看到在onResume中還調用了presenter得start方法,下面我們再看presenter的實現
presenter構造函數中調用了view得setPresenter方法將自身實例傳入,start方法中處理了數據加載與展示。如果需要界面做對應的變化,直接調用view層的方法即可,這樣view層與presenter層就能夠很好的被劃分。
最後還剩下model層實現,項目中model層最大的特點是被賦予了數據獲取的職責,與我們平常model層只定義實體對象截然不同,實例中,數據的獲取、存儲、數據狀態變化都是model層的任務,presenter會根據需要調用該層的數據處理邏輯並在需要時將回調傳入。這樣model、presenter、view都只處理各自的任務,此種實現確實是單一職責最好的诠釋。
總結
到這裡我們就基本分析完了,我們再來整體看下官方的實現方式有哪些特性。
首先是復雜度,我們可以從上面的分析看出整體的復雜度還是較低的,易學的;然後是可測試性,由於將UI代碼與業務代碼進行了拆分,整體的可測試性非常的好,UI層和業務層可以分別進行單元測試;最後是可維護性和可擴展性,由於架構的引入,雖然代碼量有了一定的上升,但是由於界限非常清晰,各個類職責都非常明確且單一,後期的擴展,維護都會更加容易。有了這個架構之後,我們再回頭看下之前的實現是不是有很多不足,沒有關系,那麼接下來就是在項目中進行實踐的時間了。
Android中的動畫主要分為三類1.Drawable Animation2.View Animation3.Property Animation這裡介紹其中的兩類,Dr
一、背景Xposed,大名鼎鼎得Xposed,是Android平台上最負盛名的一個框架。在這個框架下,我們可以加載很多插件App,這些插件App可以直接或間接操縱系統層面
Android日常開發中,對於下拉與上拉刷新控件的使用非常之頻繁。一般都會采用第三方庫,但是下拉刷新做到簡單優雅並不是太多,甚至有的兼容性都存在問題。這個是不能接受的。最
本篇主要講Animation 和 Property Animation的使用,最後會講QQ管家桌面火箭作為例子: 在Android中開發動效有兩套框架可以使用,分別為 A