[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

Cang_Wang發表於2017-11-07

大家好,我係蒼王。


以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。

[Android]如何做一個崩潰率少於千分之三噶應用app--章節列表


這幾個月一直在編寫一本叫做《Android元件化架構》的書籍,所以之前的寫作時間都用來編寫此書了。現在終於到達編輯階段,請有興趣的同學耐心等待一下。

有關注我的同學,應該有看過我之前寫的元件化路由跳轉,介紹了ARouter和ActivityRouter。

之前有元件化章節中介紹過動態建立,說到的反射的形式來初始化Fragment。

這裡結合起來,ARouter提供了可以跨module獲取Fragment的能力。

使用ARouter註冊一個Fragment

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

編譯時註解註冊為RouteType為Fragment

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力


然後通過路由導航獲取到Fragment

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

其底層也是提供了反射方案來完成,具體可以看_ARouter.java 的_navigation方法

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

ARouter已經封裝好反射的方法,可以簡單呼叫就可以了。

使用場景:如果模組是單Activity+多Fragments的架構,Fragment作為每個module的入口,那就可以使用此路由方式來啟動。


連Fragment也能獲取到了,那麼如果想將Fragment的初始化方法也封裝到module當中,就需要擁有跨module呼叫方法的能力。

這裡需要繼承ARouter的IProvider介面

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

編譯時註解會註冊RouteType.PROVIDER

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

使用navigation獲取IProvider物件就能直接呼叫方法了

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力


然後通過獲取到Provider的PostCard物件

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

在LogisticsCenter中的completion方法

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

先獲取快取中是否有此IProvider物件,沒有就會反射建立,然後設定到Postcard的provider物件中

最終PostCard中取出IProvider的實體物件,並返回到navigation呼叫

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

其實底層還是通過反射類路徑名來完成方法的反射呼叫。

使用場景:非常適合模組中需要封裝一些初始化介面,給外部呼叫模組呼叫。例如單例物件封裝,某些業務模組中的彈框(登入支付彈框)能很好的解綁到對應的業務模組當中,不需要移到base公用層使用。


如果需要傳遞引數可以使用直接方法傳參,也可以使用Autowired的依賴注入方式。

其原理是傳遞引數時,封裝成一個Bundle物件。

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

Bundle物件儲存在postcard當中

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

通過Autowired關鍵字會在編譯時註解中生成一個繼承ISyring介面的java檔案。

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

這裡通過注入跳轉後的物件target,然後強轉後將物件的變數獲取intent中的值。

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

目標檔案中通過@Autowired的註解和inject方法來注入變數引數。

此處還是會使用到反射的,autowire方法通過拼接編譯時註解的java檔名,然後使用反射建立物件。

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力

使用場景:跨模組跳轉或呼叫時引數注入


需要注意的是,請使用ARouter的最新版本,1.1.0版本以前,無法獲取到Fragment實體。


I‘m Back.

下一節將會更精彩,敬請期待!!!

群號是316556016,也可以掃碼進群。我在這裡期待你們的加入!!!

[Android]如何做一個崩潰率少於千分之三噶應用app(28)- 跨module操作能力


相關文章