大家好,我係蒼王。
以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。
[Android]如何做一個崩潰率少於千分之三噶應用app--章節列表
這幾個月一直在編寫一本叫做《Android元件化架構》的書籍,所以之前的寫作時間都用來編寫此書了。現在終於到達編輯階段,請有興趣的同學耐心等待一下。
有關注我的同學,應該有看過我之前寫的元件化路由跳轉,介紹了ARouter和ActivityRouter。
之前有元件化章節中介紹過動態建立,說到的反射的形式來初始化Fragment。
這裡結合起來,ARouter提供了可以跨module獲取Fragment的能力。
使用ARouter註冊一個Fragment
編譯時註解註冊為RouteType為Fragment
然後通過路由導航獲取到Fragment
其底層也是提供了反射方案來完成,具體可以看_ARouter.java 的_navigation方法
ARouter已經封裝好反射的方法,可以簡單呼叫就可以了。
使用場景:如果模組是單Activity+多Fragments的架構,Fragment作為每個module的入口,那就可以使用此路由方式來啟動。
連Fragment也能獲取到了,那麼如果想將Fragment的初始化方法也封裝到module當中,就需要擁有跨module呼叫方法的能力。
這裡需要繼承ARouter的IProvider介面
編譯時註解會註冊RouteType.PROVIDER
使用navigation獲取IProvider物件就能直接呼叫方法了
然後通過獲取到Provider的PostCard物件
在LogisticsCenter中的completion方法
先獲取快取中是否有此IProvider物件,沒有就會反射建立,然後設定到Postcard的provider物件中
最終PostCard中取出IProvider的實體物件,並返回到navigation呼叫
其實底層還是通過反射類路徑名來完成方法的反射呼叫。
使用場景:非常適合模組中需要封裝一些初始化介面,給外部呼叫模組呼叫。例如單例物件封裝,某些業務模組中的彈框(登入支付彈框)能很好的解綁到對應的業務模組當中,不需要移到base公用層使用。
如果需要傳遞引數可以使用直接方法傳參,也可以使用Autowired的依賴注入方式。
其原理是傳遞引數時,封裝成一個Bundle物件。
Bundle物件儲存在postcard當中
通過Autowired關鍵字會在編譯時註解中生成一個繼承ISyring介面的java檔案。
這裡通過注入跳轉後的物件target,然後強轉後將物件的變數獲取intent中的值。
目標檔案中通過@Autowired的註解和inject方法來注入變數引數。
此處還是會使用到反射的,autowire方法通過拼接編譯時註解的java檔名,然後使用反射建立物件。
使用場景:跨模組跳轉或呼叫時引數注入
需要注意的是,請使用ARouter的最新版本,1.1.0版本以前,無法獲取到Fragment實體。
I‘m Back.
下一節將會更精彩,敬請期待!!!
群號是316556016,也可以掃碼進群。我在這裡期待你們的加入!!!