多個APP合併為一個APP開發的實現方案

但聞耕耘之路發表於2020-12-26

需求

目前開發了線上娛樂、收音機、本地音樂三個APP,需要開發一款APP整合這三個模組功能。
具體要求:左側顯示導航欄,包含“線上娛樂”、“收音機”、“本地音樂”按鈕,點選可進入相應模組功能。

目前已知有兩種實現方案,具體如下


一、方案一——仍然分三個APP開發

三個APP具有佈局完全一致的左側導航欄,點選導航欄完成APP之間的切換。這裡通過三個APP來回跳轉的方式,實現了讓使用者看起來是一個APP。其中需要注意:

1.在每個APP中,在BaseActivity中統一顯示、控制左側導航欄。注意每個活動取消切換動畫,背景設定為透明色,這樣可保證APP之間來回切換時看著像一個APP。

2.多個娛樂類應用在後臺時,需要考慮點選圖示應該開啟哪個應用,需要每個APP都需要通過傳送接收廣播來記錄應該啟動哪個APP,這個過程就相當繁瑣;

2.靈活度低,如果導航欄需要新增/刪除/修改時,需要去三個APP中進行修改。

二、方案二——合併為一個APP開發

按照一般的開發會存在一個問題:如果按照預設活動啟動模式,記錄三個模組的棧頂Activity,模組A依次開啟A1-A2-A3,再點選導航欄按鈕模組B依次開啟B1-B2-B3,再次點選模組A按鈕跳轉到A3後,點選返回按鈕則會跳轉到B3頁面而非A2。

1.結合singleTask和taskAffinity實現一個APP中有三個任務棧,使用三個任務棧分別管理相應模組(可避免上述問題);

2.使用MyApplication在活動關閉、開啟、退出APP時分別記錄三個模組的任務棧列表;

3.存在的問題,由於會建立三個任務棧,所以在建立第二個、第三個任務棧時會出現黑屏現象,目前仍未解決。考慮到手機APP之間跳轉貌似沒有此現象,應該是能夠解決的;

4.後續開發建議可考慮元件化開發,三個功能模組分別為三個模組,這樣每個模組可單獨執行。

總結

很多車機已經將娛樂類APP融為一個大的APP,大多數車廠的案例也只是左側導航欄點選控制介面的切換,再點選了導航欄按鈕後只有一個頁面,不會存在從這個頁面切換到下一個頁面的情況,即每個模組只有一個頁面,這種情況使用fragment就能實現。
參考吉利、領克車型,每個模組會有很多個頁面,這個就與我們的需求類似。
參考了手機APP,比如支付寶中巢狀了很多第三方應該,跳轉會有一個類似loading的頁面後才會跳轉到第三方應用,而且支付寶與第三方應用沒有共同佈局,即類似於我們需求的左側統一導航欄,查詢資料用的可能是外掛化技術,故不滿足我們的需求。
請教了同行,同行給出了兩個解決思路,也即上述的兩種方案思路,故按照這兩種思路進行了實踐有了上述的總結。

相關文章