安卓AOP實戰(zhàn):APT打造極簡路由

特點:
1、0個類0行代碼(除了apt及生成的僅僅一個類的代碼)
2、0反射0性能損耗,基于編譯期間注解處理器
3、支持任何類型的參數(shù)傳遞,沒有原生Intent的數(shù)據(jù)大小限制
4、支持頁面元素共享的轉(zhuǎn)場動畫

用法

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

目標Activity注解

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

2、@Extra(C.HEAD_DATA)注解標注上個界面?zhèn)鬟M來的參數(shù)user信息,注解內(nèi)的值就是取值時的key。

3、@SceneTransition(C.TRANSLATE_VIEW)注解標注上個界面?zhèn)鬟^來的共享元素轉(zhuǎn)場動畫的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());

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

效果對比

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

刪掉重構(gòu)前的目標Activity里的初始化代碼

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

原理

來看看我們的TRouter里自動生成的頁面跳轉(zhuǎn):

TRouter

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


自動初始化

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

先根據(jù)注解整理出需要的信息:

RouterActivityModel

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

APT生成代碼

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

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

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

QQ群:AndroidMVP 555343041

更新日志:

2017/1/31:AOP新增SysPermissionAspect支持動態(tài)申請系統(tǒng)權(quán)限切片,輕松適配6.0+

2017/1/27:AOP新增DbRealmAspect支持Realm數(shù)據(jù)庫,數(shù)據(jù)庫突破你想像的簡單(年夜特供)

2017/1/8: 使用Apt封裝Retrofit生成ApiFactory替換掉所有的Repository,狂刪代碼

2017/1/7: 使用DataBinding替換掉所有的ButterKnife,狂刪代碼

2017/1/6: 使用DataBinding替換掉所有的ViewHolder,狂刪代碼,從此邁向新時代

2016/12/30:使用Apt生成全局路由TRouter,更優(yōu)雅的頁面跳轉(zhuǎn),支持傳遞參數(shù)和共享view轉(zhuǎn)場動畫

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

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

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

2016/12/26:抽離CoreAdapterPresenter優(yōu)化TRecyclerView

安卓AOP實戰(zhàn):面向切片編程

Android實用技巧之:用好泛型,少寫代碼

安卓AOP實戰(zhàn):APT打造極簡路由

全局路由TRouter,更優(yōu)雅的頁面跳轉(zhuǎn)

安卓AOP實戰(zhàn):Javassist強擼EventBus

加入OkBus,實現(xiàn)注解傳遞事件

安卓AOP三劍客:APT,AspectJ,Javassist

1、去掉所有反射>2、新增apt初始化工廠,替換掉了dagger2。>3、新增aop切片,處理緩存和日志

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評論 25 709
  • AOP:面向切面編程(Aspect-Oriented Programming)。如果說,OOP如果是把問題劃分到單...
    North_2016閱讀 47,302評論 38 270
  • 前言 EventBus到了3.0版本,使用Apt注解處理器來在編譯期通過讀取@Subscribe()注解并解析生成...
    North_2016閱讀 7,604評論 11 30
  • WHY 如果說OOP(面向?qū)ο蟮某绦蛟O計)的主要思想是將問題歸分到相應的對象(類)中去實現(xiàn),再把相關(guān)類模塊化使得模...
    野生大P閱讀 1,048評論 0 8
  • 在我家經(jīng)常有這種情況發(fā)生:當我弟犯了點小錯,我的繼母經(jīng)常就是罵他,久而久之,我聽著也煩。 還記得剛過不久的“小司”...
    龍諭閱讀 485評論 5 2

友情鏈接更多精彩內(nèi)容