91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android開發之項目模塊化的示例分析

發布時間:2021-08-21 13:58:36 來源:億速云 閱讀:139 作者:小新 欄目:移動開發

這篇文章主要為大家展示了“Android開發之項目模塊化的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Android開發之項目模塊化的示例分析”這篇文章吧。

項目協同

項目協同,也叫多項目協同,是對多個相關且有并行情況項目的管理模式,它是幫助實現項目與企業戰略相結合的有效理論和工具[1]。本文的項目協同為Android主APP與其他業務模塊的協同。

假設我們的APP目錄如下,一個主app,多個modules。并假設我們的主app與各modules為多git repository。一個大APP多git repository管理是合理的。本文使用git repo[2]管理項目(可能有團隊使用git submodule[3],在此不推薦,其坑會很多)。

MApp --獨立git rep
 app
 modules
   module1 --獨立git rep
   module2 --獨立git rep
   module3 --獨立git rep
   ...

使用git repo,團隊早期可以不用玩一整套(git repo+gerrit),可以考慮只用repo去管理項目目錄,成員提交代碼還是繼續走git提交。

項目開發與調試

Android模塊化的主要目的是業務并行開發,減少編譯時間,但又方便業務模塊與主App的調試。本文介紹如下方案。

MApp
 app --application
 modules
   module1
     demo --application
     lib --library
     settings.gradle

 settings.gradle
 settings_debug.gradle
 local.properties

MApp的settings.gradle文件:

 boolean moduleDebug() {
  boolean ret = false
  try {
   Properties properties = new Properties()
   File file = file('local.properties')
   if (!file.exists()) {
    return false
   }
   properties.load(file.newDataInputStream())
   String debugStr = properties.getProperty("debug")
   if (debugStr != null && debugStr.length() > 0) {
    ret = debugStr.toBoolean()
   }
  } catch (Throwable throwable) {
   throwable.printStackTrace()
   ret = false
  }
  return ret
 }
 
 include ':app'
 if (moduleDebug()) {
  apply from: 'settings_debug.gradle'
 }

settings_debug.gradle文件:

//include 'module1'
//project(':module1').projectDir = new File('modules/module1/lib')
...其他業務模塊

當module1在需求開發階段,完全不用考慮主APP,可以在Android Studio中以項目的方式打開。當module1需要和主APP跑流程時,我們只需要把MApp的local.properties的debug屬性改為true,并在settings_debug.gradle中打開module1即可。

業務模塊服務調用與通知

當APP模塊化后,通過Intent(Context packageContext, Class<?> cls)方式去啟動其他模塊的Activity就不太合理了。模塊化后,模塊里的Activity或其他組件對其他業務模塊最好透明。喚起Activity可以通過App Links[4]的方式,也就是我們常說的url router方式。App Links還可以玩deep link。Github上現在開源項目比如ARouter[5]就是App Link的應用。

當然,模塊之間的通信,不局限于啟動四大組件,還有服務調用與通知。這的服務不是Android系統的Service。舉個服務通知的例子,在電商APP中,店鋪詳情頁點收藏按鈕,可能要通知其他模塊,變更UI或數據。服務調用的例子,比如模塊喚起登陸注冊,登陸或注冊成功后,做相應業務處理。

服務調用,大部分團隊可能沒涉及到。服務調用可以用IOC,反射等注冊到服務注冊中心。本文選一個取巧的方案。利用Applicatin.getSystemService方法,讓Application作為ZoomKeep一樣成為服務注冊中心。只要各Serivce繼承同一個Interface,相應模塊間服務調用就不難了。

public class MApp extends Application {
 
 @Override
 public Object getSystemService(String name) {
  return super.getSystemService(name);
 }
}

服務通知,稍簡單,用廣播,EventBus[6]或其他方式都可。本文推薦EventBus,但其有缺點,如Event多起來后,很難找全觀察者和通知者之間的關系;一些簡單Event對象無法復用,所以最好二次開發。

以上是“Android開發之項目模塊化的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新民市| 东乌| 乌鲁木齐县| 罗平县| 南雄市| 平度市| 于田县| 兴隆县| 天祝| 惠来县| 拉萨市| 牟定县| 曲阳县| 英吉沙县| 彰化市| 云阳县| 漠河县| 泾源县| 灵山县| 闵行区| 肃南| 临沂市| 进贤县| 玉门市| 兴化市| 理塘县| 昆明市| 承德市| 武威市| 义乌市| 全南县| 都匀市| 北票市| 息烽县| 清镇市| 绥德县| 桃园县| 灵寿县| 交城县| 互助| 广东省|