Android徹底元件化 如何使用Arouter

2021-09-11 09:47:02 字數 3665 閱讀 2971

得到android元件化方案已經開源,參見android元件化方案開源。方案的解讀文章是乙個小的系列,這是系列的第五篇文章:

android徹底元件化方案實踐

android徹底元件化demo發布

android徹底元件化-**和資源隔離

android徹底元件化—ui跳轉公升級改造

android徹底元件化—如何使用arouter

上篇文章講到,androidcomponent已經進行了ui跳轉的公升級改造,可以支援路由的自動註冊和路由表的自動生成。但是很多使用元件化方案的同學都表示專案中已經接入arouter來進行ui跳轉,遷移成本比較高。因此我就專門寫了這篇文章,講解一下如何在元件中使用arouter。

不論用ddcomponent自帶的方案還是arouter,要做到元件之間自由並且可控的跳轉,需要做到下面幾點:

1、路由跳轉需要支援傳遞基本型別和自定義型別(例如object) 2、路由的跳轉需要和元件的生命週期一致,即只有載入的元件才可以跳轉,解除安裝後的元件是不可達的 3、最好生成路由表,元件對外提供的路由可以輕鬆查閱到

下面我們就從配置開始一步步的講怎麼使用arouter

basiclib模組中增加以下依賴,basiclib是元件化框架中共用的依賴庫:

compile 'com.alibaba:arouter-api:1.3.0'

複製**

在跳轉的目標元件的build.gradle中,增加以下配置:

android 

} }

}dependencies

複製**

在元件化框架中,我們的示例是從readercomponent跳轉到sharecomponent,所以上述配置增加在sharecomponent下面的build.gradle中。

我們以「分享圖書」 頁面為例

@route(path = "/share/sharebook")

public

class

shareactivity

extends

public

void

setname

(string name)

public

intgetage

() public

void

setage

(int age)

public string getcounty

() public

void

setcounty

(string county)

}複製**

現在就解決了author的可見性問題,但是為了能在路由中傳遞,按照arouter的要求,還需要自己實現serializationservice:

@route(path = "/service/json")

public

class

jsonserviceimpl

implements

serializationservice

@override

public

t json2object

(string text, classclazz)

@override

public string object2json

(object instance)

@override

public

t parseobject

(string input, type clazz)

}複製**

這裡筆者就遇到了乙個坑,本來我把這個類定義在readercomponent中,結果執行之後會報空指標異常。只有我把類移到sharecomponent之後,異常才消失。暫時沒找到原因,但是定義在這裡,加入要跳轉到readercomponent怎麼辦呢?

在元件化框架demo中,發起跳轉是readercomponent中的readerfragment中,demo中列出了兩個示例: 普通跳轉

private

void

gotoshareactivitynormal

()複製**

以及startactivityforresult

private

void

gotoshareactivityforresult

()複製**

經過上面的操作,已經可以完成ui跳轉了。但是如果執行demo就可以發現,此時即使解除安裝了分享元件,分享書的頁面還是可以進入的,說明生命週期沒有同步。在ddcomponent自帶的方案中是不存在這個問題的,因為跳轉的邏輯已經與元件化生命週期繫結在一起。 這裡就用到arouter自帶的***功能,每個元件都需要定義乙個***,當元件解除安裝之後需要攔截住該元件的跳轉入口。 下面是分享元件***的示例**:

@interceptor(priority = 1, name = "分享元件***")

public

class

shareinterceptor

implements

iinterceptor

else

if ("/share/sharebook".equals(postcard.getpath())

|| "/share/sharemagazine".equals(postcard.getpath()))

});}

}@override

public

void

init

(context context)

}複製**

public

class

implements

@override

public

void

onstop()}

複製**

這個arouter暫時沒有提供,ddcomponent自帶的方案增加了這個功能,當元件build生成之後,在根目錄生成uiroutertable資料夾,裡面會列出每個元件向外提供的路由表以及具體引數

auto generated, do not change !!!! 

host : share

分享雜誌頁面

/sharemagazine

author:com.luojilab.componentservice.share.bean.author

bookname:string

分享書籍頁面

/sharebook

author:com.luojilab.componentservice.share.bean.author

bookname:string

複製**

這點對於元件的協同開發是比較重要的,畢竟跳轉之前翻閱別人的**是件比較費事的工作

arouter是乙個優秀的路由跳轉方案,ddcomponent自帶的方案也參考了很多其中的想法,功能很強大

使用中需要與元件化方案相容的地方主要是生命週期相關,在***上增加部分邏輯就可以完成

arouter使用中還存在一些小的問題,可能是姿勢不對,接入中走了不少彎路,有熟悉這塊的朋友可以指出原因

路由表沒有自動生成,對外沒有暴露有哪些路由協議和引數,對於元件之間協同開發不太友好

android元件GridView簡單使用

gridview與listview的用法基本一致,不同的只是布局。當我們開啟手機,應用會以宮格顯示,那就是gridview。以 形式展示給大家,介面卡使用 adapter,熟悉了介面卡的用法,就只需要注意幾個gridview的屬性即可。public class mainactivity extend...

Android元件化方案

1為什麼要專案元件化 2如何元件化 3元件化實施流程 1元件模式和整合模式的轉換 2元件之間androidmanifest合併問題 3全域性context的獲取及元件資料初始化 4library依賴問題 5元件之間呼叫和通訊 6元件之間資源名衝突 4元件化專案的工程型別 2功能元件和common元件...

Android元件化架構

元件化架構需要各個元件不僅能夠單獨執行而且也能無縫的整合到主程式中,在這個過程中會遇到以下問題 todo 在專案的根目錄下的gradle.properties檔案中宣告乙個變數ismodule 該變數能對整個專案中所有的gradle檔案生效 代表是否是元件開發模式。gradle.properties...