日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

组件和模块间Activity路由框架

發布時間:2025/5/22 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 组件和模块间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*/@ActivityName("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);@ActivityName("com.tubb.afrouter.sample.NormalActivity")void forResult(@ParamKey("reqCode") int reqCode);@ActivityName("com.tubb.afrouter.sample.BackStartActivity")void backStart();/*** 自己手動處理Activity的啟動* @return Intent Wrapper*/@ActivityName("com.tubb.afrouter.sample.NormalActivity")Wrapper returnTypeStart();/*** 攜帶options* @param bundle 5.0 options*/@ActivityName("com.tubb.afrouter.sample.NormalActivity")void activityOptionsStart(@ParamKey("options") Bundle bundle);/*** 支持攜帶的參數類型*/@ActivityName("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() {@Overridepublic 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路由框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。