路由庫;一款Android平臺對頁面、服務的路由框架。自動化且易用。
html
實現功能 | RouterKit | Airbnb 的DeepLinkDispatch | 阿里 ARouter | 天貓 統跳協議 | ActivityRouterGithub上Star最多 |
---|---|---|---|---|---|
路由註冊 | 註解式APT自動註冊 | 每一個module都要手動註冊 | 每一個module的路由表都要APT類查找 | AndroidManiFest配置 | 每一個module都要手動註冊 |
路由查找 | 路由表 | 路由表 | 路由表 | 系統Intent | 路由表 |
路由分發 | Activity轉發 | Activity轉發 | Activity轉發 | Activity轉發 | Activity轉發 |
動態替換 | 主線程 | 不支持 | 線程等待 | 不支持 | 不支持 |
動態攔截 | 主線程 | 不支持 | 線程等待 | 不支持 | 主線程 |
安全攔截 | 主線程 | 不支持 | 線程等待 | 不支持 | 主線程 |
方法調用 | 手動拼裝 | 手動拼裝 | 手動拼裝 | 手動拼裝 | 手動拼裝 |
參數獲取 | JET 依賴自動注入,支持全部類型 | 參數定義在path,不利於多人協做 | Apt依賴注入,可是要手動調用get方法 | 手動調用 | 手動調用 |
結果返回 | onActivityResult | onActivityResult | onActivityResult | onActivityResult | onActivityResult |
支持多Module | 支持 | 不支持 | 支持 | 不支持 | 支持 |
總體相似 阿里開源的ARoute 功能;移除分組概念,強化多Module編譯和自動註冊路由表,會更通用。前端
@JUri("/home")
public class IntentActivity extends AppCompatActivity {
// Uri 的參數經過 Intent傳遞進來, 推薦使用Jet自動讀取;
.....
//
}複製代碼
or 聲明2: 服務功能調用:
```java
//支持,多個地址 @JUri(array={"/home","/action"})
@JUri("/action")
public class TestAction extends Action {
Context context = MyApplication.getContext();vue
@Override
public void run(Map queryMap) {java
super.run(queryMap);
//Uri 裏面的參數經過Map傳遞進來
String result = (String) queryMap.get("param");
Toast.makeText(context, "Test Action: " + result, Toast.LENGTH_SHORT).show();複製代碼
}
}android
- 方法調用
```java
// 儘量早,推薦在Application中初始化,初始化路由表
Router.getInstance().init(mApplication);
// 方式一
String uri = "meiyou:///home";
Router.getInstance().run(uri);
// 方式二
Router.getInstance().run(context, Uri.parse("meiyou:///second?uid=233"));
// 方式三
// 若是AndroidManifest.xml註冊了RouterCenterActivity,也能夠經過下面的方式打開,若是是APP內部使用,不建議使用。
// startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("meiyou:///home?uid=233")));複製代碼
只要在AndroidManifest.xml註冊了RouterCenterActivity,便可變成經典的Uri打開,能夠支持外部瀏覽器、其它APP打開內部的Activity。ios
<activity android:name="com.meiyou.router.RouterCenterActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="test" />
</intent-filter>
</activity>複製代碼
// Java代碼調用
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("meiyou:///second?uid=233&name=Wiki")));
// HTML方式,系統瀏覽器(不支持微信,微信內部開網頁會禁止全部的Scheme)
<a href="test:///second?uid=233&name=Wiki">打開JoyrunApp的SecondActivity</a>複製代碼
經過前置攔截器能夠對URL進行攔截,能夠經過攔截器對URL進行修改,也能夠攔截URL,不讓路由器打開。git
Router.addInterceptor(new UriInterceptor() {
public String beforeExecute(InterceptorData data) {
//return url.replace("test://www.XXX.com/","test://");
return data;
}
});複製代碼
Router.addScheme("meiyou");複製代碼
在gradle文件配置:github
//內部版本:0.0.1-SNAPSHOT
compile "com.meiyou.framework:router:1.0.0"複製代碼
QQ羣:547612870 express