安卓AOP實戰:APT打造極簡路由

特點

1、0個類0行代碼(除了apt及生成的僅僅一個類的代碼)

2、0反射0性能損耗,基于編譯期間注解處理器

3、支持任何類型的參數傳遞,沒有原生Intent的數據大小限制

4、支持頁面元素共享的轉場動畫

用法

那么,既然敢說極簡,到底有多簡單呢,來看看用法:

目標Activity注解

1、@Router(C.USER_INFO)注解參數 USER_INFO = "userInfo"; 就是當前頁面的actionName簡稱。

2、@Extra(C.HEAD_DATA)注解標注上個界面傳進來的參數user信息,注解內的值就是取值時的key。

3、@SceneTransition(C.TRANSLATE_VIEW)注解標注上個界面傳過來的共享元素轉場動畫的View。

除了這個注解 ,就沒有其他任何代碼了。

使用時,也就一句話:

TRouter.go(C.USER_INFO, new ExtraData(C.HEAD_DATA, SpUtil.getUser()).build(), im_face);

對于不傳參的就更簡單了:

TRouter.go(C.FEED_BACK);

再看看之前的寫法:

ActivityCompat.startActivity(mContext, new Intent(mContext, UserActivity.class) .putExtra(C.HEAD_DATA, SpUtil.getUser()) , ActivityOptionsCompat.makeSceneTransitionAnimation( (Activity) mContext, im_face, C.TRANSLATE_VIEW).toBundle());

于是,這些代碼都可以注釋掉刪掉啦:

效果對比

當然,重構前的目標Activity里的初始化代碼,也可以刪掉啦:

刪掉重構前的目標Activity里的初始化代碼

為什么刪掉呢,因為,這些極具規律性的代碼,不需要手寫,全部由APT自動生成了。

原理

來看看我們的TRouter里自動生成的頁面跳轉:

TRouter

以及自動給目標Activity自動初始化傳參和轉場View的代碼:

自動初始化

整個TRouter的原理,就是讓Apt幫我們寫代碼。

先根據注解整理出需要的信息:

RouterActivityModel

然后按照固定套路生成代碼就可以了,例如:

APT生成代碼

具體代碼請看RouterProcessor。因為邏輯并不復雜,為了保持簡潔,沒有像ButterKnife那樣針對每個目標單獨生成代理類,直接生成全局的靜態方法即可,只需要保證初始化賦值目標是Public即可,而ButterKnife的代理類實在同一個包名下,則沒有這樣的要求,但是ButterKnife的代理類的獲取需要用反射,兩種實現方式各有利弊吧。

好了 ,2016年最后一趟車即將到站了,所有代碼在項目 T-MVP

題外,TMVP一直在不斷推翻,不斷優化,不斷重寫,感興趣的可以關注我的github看到最新的進展。TMVP全家桶現有TRecyclerView、TRouter、OkBus等。

更新日志:

2016/12/30:使用Apt生成全局路由TRouter,更優雅的頁面跳轉,支持傳遞參數和共享view轉場動畫

2016/12/29:去掉BaseMultiVH新增VHSelector支持更完美的多ViewHolder

2016/12/28:使用Apt生成全局的ApiFactory替代所有的Model

2016/12/27:增加了BaseMultiVH擴展支持多類型的ViewHolder

2016/12/26:抽離CoreAdapterPresenter優化TRecyclerView

 

來自:http://www.jianshu.com/p/6ccfa7b50f0e

 

 本文由用戶 DomSummerli 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!