貓眼自動注入化的跳轉(zhuǎn)參數(shù)解析方式

貓眼的頁面跳轉(zhuǎn)參數(shù)解析舊方式

onCreate()中需要寫繁瑣的重復代碼

之前,我們需要在activity的onCreate()中,把頁面跳轉(zhuǎn)傳遞的參數(shù),解析出來。外界傳遞來的參數(shù)可能在intent的bundle里面,也有可能在intent的uri中(隱式跳轉(zhuǎn))。
因此為了得到跳轉(zhuǎn)的參數(shù),我們需要類似這么做:
int value = 0;
if(intent!=null){
value = intent.getIntExtra(name,defaultValue);
}
if(value == 0 && intent.getData() != null){
//從uri中獲取
Uri uri = intent.getData();
try {
intExtra = Integer.parseInt(uri.getQueryParameter(paramName));
} catch (Exception e) {
//解析錯誤,即參數(shù)不合法
//handleUnValidParam() 比如降級處理,跳轉(zhuǎn)到一個兜底頁面
}
}

解析每一個參數(shù)都要做一次上面的流程,很繁瑣。維護也有一些成本。

主參數(shù)的處理

有這么一種場景,我們一個頁面需要一個movieId作為主參數(shù),如果頁面跳轉(zhuǎn)沒有這個參數(shù),那么需要降級處理,跳轉(zhuǎn)到兜底頁面,或者主頁面。如果傳來的參數(shù)中有主參數(shù),但是沒有其他非必須參數(shù)。那么不需要降級處理,其他非必須參數(shù)給默認值就可以了,頁面正常跳轉(zhuǎn)。
這樣一種場景,之前在貓眼并沒有做。

貓眼的頁面跳轉(zhuǎn)參數(shù)解析新方式:自動注入

只需要在Activity中使用CheckAndInjectJumpParam 注解 參數(shù)對應的成員變量即可,在Activity onCreate()執(zhí)行之前,會自動把跳轉(zhuǎn)參數(shù)注入進來。不論跳轉(zhuǎn)的形式是普通顯示跳轉(zhuǎn)還是隱式跳轉(zhuǎn)。如果參數(shù)不合法,那么會自動進行降級處理:跳轉(zhuǎn)到兜底頁面;如果主參數(shù)不存在,也會進行降級處理。

 public  class xxxActivity{

    @CheckAndInjectJumpParam(keyParam = true)
    private long id;
    @CheckAndInjectJumpParam
    private String nm;
    @CheckAndInjectJumpParam
    private String enName;
    @CheckAndInjectJumpParam
    private boolean needRate;
   
    protect void onCreate(Bundle bundle){
       super.onCreate(bundle);
       ...//直接使用id、enName..
    }
}

不需要在onCreate()中手寫 參數(shù)的解析,或者進行解析失敗的兜底處理工作。

大致原理

使用aop在Activity onCreate()執(zhí)行之前,進行頁面跳轉(zhuǎn)參數(shù)的解析工作。如果解析失敗/或不含有主參數(shù),那么會進行異常處理(目前是finish掉當前頁面,然后啟動兜底頁面)。注意,finish掉當前頁面時,需要調(diào)用當前頁面activty的系統(tǒng)onCreate()方法,不然會報SuperNotCalledException。

因為這些工作是在onCreate()方法執(zhí)行之前完成的,所以出現(xiàn)異常時,不會進行任何業(yè)務(wù)代碼的生命周期的回調(diào)(除onDestroy)。所以也就不會產(chǎn)生頁面含有的業(yè)務(wù)fragment等。

todo

需要繼續(xù)完成的工作是:把activity onCreate()中之前舊的參數(shù)解析方式換成新的自動注入化的跳轉(zhuǎn)參數(shù)解析方式。

具體代碼因為涉及到公司的要求,就不外放了,其實不難,使用aspectj 的Around攔截一下onCreate()就好了。阿里的Arouter做的功能更豐富一些,大家可以參考一下。

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

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