组件和模块间Activity路由框架
生活随笔
收集整理的這篇文章主要介紹了
组件和模块间Activity路由框架
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
AFRouter
組件和模塊間Activity路由框架,通過動態代理技術實現,輕量、靈活
特性
- 支持絕大多數參數類型(Intent可攜帶的數據類型)
- 專為組件和模塊間Activity路由設計,組件化UI路由解耦
- 支持options(Android 5.0 啟動Activity方式)
- 支持Context、Activity和Fragment作為調用者(Activity.startActivity()、Context.startActivity()和Fragment.startActivity())
- 支持設置request code(startActivityForResult())
- 提供攔截器(Interceptor),全局過濾Activity
- 支持安全啟動Activity(未找到目標Activity時路由到默認的Activity)
- 可以得到Intent包裝類Wrapper,然后可以自己作處理
- 支持Android 2.3及以上版本
使用
添加依賴
dependencies {api 'com.tubb.afrouter:afrouter:0.3.0' }復制代碼定義Router Service
首先要定義Router Service,告訴框架如何來啟動一個Activity,直接來看示例
public interface AFRouterService {/*** 以Activity類全名的方式來啟動Activity*/("com.tubb.afrouter.sample.NormalActivity") // 類全名void start();/*** 指定Action的方式來啟動Activity* @param action intent action* @param reqCode startActivityForResult() request code*/void actionStart(@ParamKey("action") String action, @ParamKey("reqCode") int reqCode);("com.tubb.afrouter.sample.NormalActivity")void forResult(@ParamKey("reqCode") int reqCode);("com.tubb.afrouter.sample.BackStartActivity")void backStart();/*** 自己手動處理Activity的啟動* @return Intent Wrapper*/("com.tubb.afrouter.sample.NormalActivity")Wrapper returnTypeStart();/*** 攜帶options* @param bundle 5.0 options*/("com.tubb.afrouter.sample.NormalActivity")void activityOptionsStart(@ParamKey("options") Bundle bundle);/*** 支持攜帶的參數類型*/("com.tubb.afrouter.sample.VerifyParamsActivity")void verifyParams(@ParamKey("strP") String strP, @ParamKey("strsP") String[] strsP,@ParamKey("intP") int intP, @ParamKey("intsP") int[] intsP,@ParamKey("shortP") short shortP, @ParamKey("shortsP") short[] shortsP,@ParamKey("longP") long longP, @ParamKey("longsP") long[] longsP,@ParamKey("charP") char charP, @ParamKey("charsP") char[] charsP,@ParamKey("doubleP") double doubleP, @ParamKey("doublesP") double[] doublesP,@ParamKey("floatP") float floatP, @ParamKey("floatsP") float[] floatsP,@ParamKey("byteP") byte byteP, @ParamKey("bytesP") byte[] bytesP,@ParamKey("booleanP") boolean booleanP, @ParamKey("booleansP") boolean[] booleansP,@ParamKey("bundleP") Bundle bundleP,@ParamKey("sparseArrayP") SparseArray<ParcelableEntity> sparseArrayP,@ParamKey("arrayListIntP") ArrayList<Integer> arrayListIntP,@ParamKey("arrayListStringP") ArrayList<String> arrayListStringP,@ParamKey("arrayListCharSequenceP") ArrayList<CharSequence> arrayListCharSequenceP,@ParamKey("arrayListParcelableP") ArrayList<ParcelableEntity> arrayListParcelableP,@ParamKey("parcelableArrayP") ParcelableEntity[] parcelableArrayP,@ParamKey("parcelableP") ParcelableEntity parcelableP,@ParamKey("serializableP") SerializableEntity serializableP); }復制代碼快速使用
定義了Router Service后,后面的調用流程將非常簡單,一兩行代碼即可啟動Activity
// Router Service可以保存在全局變量中 AFRouterService afService = AFRouter.getInstance().create(AFRouterService.class, this); afService.forResult(FOR_RESULT_CODE);復制代碼通過Wrapper類使用
得到框架對Intent包裝類Wrapper,然后由自己來處理
Wrapper wrapper = afService.returnTypeStart(); // wrapper.addFlags(); // wrapper.setAction(); // wrapper.setClassName(); // // 真實的Intent // wrapper.getIntent(); wrapper.start();復制代碼攔截過濾
支持全局攔截,可以過濾掉一些Activity
afService = AFRouter.getInstance().create(AFRouterService.class, this, new Interceptor() {public boolean intercept(Wrapper wrapper) {Toast.makeText(wrapper.getContext(), "Interceptor return true", Toast.LENGTH_SHORT).show();return true;} }); afService.backStart();復制代碼框架內置的幾個參數
"action" Intent Action 如果傳了這個參數,`Intent.setAction()`將會被調用 "reqCode" startActivityForResult() request code 如果傳了這個參數,最終調用的是`startActivityForResult()` "options" startActivity(Intent intent, Bundle options) 如果傳了這個參數,`startActivity(Intent intent, Bundle options)`或`startActivityForResult(Intent intent, Bundle options)`將被調用復制代碼配置默認Activity(找不到目標Activity時顯示的Activity,避免APP崩潰)
<meta-datatools:replace="android:value"android:name="com.tubb.afrouter.ERROR_ACTIVITY_CLASS_NAME"android:value="[默認Activity的類全名(包名.類名)]"/>復制代碼詳細使用請參照源碼工程,強烈建議clone下來查看
轉載于:https://juejin.im/post/59e2ccb26fb9a0452577258c
總結
以上是生活随笔為你收集整理的组件和模块间Activity路由框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷1373 小a和uim之大逃离
- 下一篇: [js高手之路]打造通用的匀速运动框架