一、ARouter 四大核心能力(你必须背住)
- 页面路由跳转(Activity/Fragment)
- 服务接口暴露 IProvider(跨模块调用)
- 通过 URI 跳转(H5、推送、Scheme)
- 全局拦截器、全局监听、依赖注入、分组管理
下面我把除跳转、IProvider 之外的所有常用功能,全部详细总结给你!
二、ARouter 最常用功能(详细总结)
1. URI 跳转 / Scheme 跳转(超级常用)
作用:
- 推送点击跳转
- H5 跳转原生页面
- 外部 App 跳转你的页面
- 动态路由(后台下发路径跳转)
用法:
java
运行
// 比如后台返回:"arouter://app/main/home"
ARouter.getInstance()
.build(Uri.parse("arouter://app/main/home"))
.navigation();
配置:
java
运行
@Route(path = "/main/home", scheme = "arouter")
2. 通过 URL 传参(自动解析)
支持:
- int
- string
- boolean
- object
- bundle
- Uri
示例:
plaintext
arouter://app/user/profile?userId=123&userName=zhangsan
ARouter 自动解析并注入到目标页面:
java
运行
@Autowired
String userId;
@Autowired
String userName;
3. 依赖注入 @Autowired(自动赋值)
不用手写 getIntent ()、getExtra ()! ARouter 自动帮你赋值。
发送:
java
运行
ARouter.getInstance()
.build("/user/profile")
.withString("userId", "123")
.withObject("user", new User())
.navigation();
接收:
java
运行
@Route(path = "/user/profile")
public class UserActivity extends AppCompatActivity {
@Autowired
String userId;
@Autowired
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ARouter.getInstance().inject(this); // 自动注入
}
}
4. 全局拦截器(最核心功能!)
作用:
- 登录拦截
- 权限拦截
- 跳转日志
- 跳转监控
- 页面访问统计
写法:
java
运行
@Interceptor(priority = 1, name = "登录拦截")
public class LoginInterceptor implements IInterceptor {
@Override
public void process(Postcard postcard, InterceptorCallback callback) {
if (需要登录 && 未登录) {
// 跳转登录
ARouter.getInstance().build("/login").navigation();
callback.onInterrupt(null); // 中断跳转
} else {
callback.onContinue(postcard); // 放行
}
}
}
5. 预处理 / 全局监听(NavigationCallback)
跳转前、跳转后、失败、丢失,都能监听:
java
运行
ARouter.getInstance()
.build("/main/home")
.navigation(context, new NavCallback() {
@Override
public void onArrival(Postcard postcard) {
// 跳转成功
}
@Override
public void onInterrupt(Postcard postcard) {
// 被拦截
}
@Override
public void onLost(Postcard postcard) {
// 找不到页面
}
});
6. Fragment 获取 / 实例化(组件化必备)
ARouter 可以跨模块获取 Fragment 实例!
java
运行
Fragment fragment = (Fragment) ARouter.getInstance()
.build("/main/homeFragment")
.navigation();
意思:
通过 ARouter 路由,拿到 /main/homeFragment 这个页面的 Fragment 对象然后赋值给 fragment 变量。
你项目里一定有一个类长这样:
java
运行
@Route(path = "/main/homeFragment")
public class HomeFragment extends Fragment {
}
这段代码的作用就是:通过字符串地址 /main/homeFragment,找到这个 HomeFragment,并创建一个对象给你。
生活比喻(秒懂)
你要找 HomeFragment你不直接 new HomeFragment()而是:
- 喊一声:ARouter,我要 /main/homeFragment
- ARouter 自动给你把 Fragment 拿出来
- 你直接用
为什么要用 ARouter?不用 new?
- 跨模块访问(多个 module 之间不能直接互相 new)
- 解耦(不用依赖类,只用字符串就能找到)
- 方便传参、拦截、跳转、获取 fragment/activity
超级总结(背会)
plaintext
ARouter.getInstance()
.build("路径")
.navigation();
= 通过路径字符串,获取对应的 Activity 或 Fragment 对象
注意:Activity路径直接跳转走了,Fragment路径,返回Fragment 对象;
7. 服务发现(增强 IProvider)
- 发现某一类服务
- 批量获取所有实现类
java
运行
// 找到所有实现 ITestService 的服务
List<ITestService> services = ARouter.getInstance().lookup(ITestService.class);
用途:
- 插件化
- 多实现扩展
- 组件化钩子
8. 分组管理(Group)
- 按模块分组
- 懒加载
- 提高性能
java
运行
@Route(path = "/car/main", group = "car")
9. 降级策略(页面丢失处理)
找不到页面时统一处理:
java
运行
ARouter.setDegradeService(new DegradeService() {
@Override
public void onLost(Context context, Postcard postcard) {
// 统一跳 404
}
});
10. 自定义序列化(Json 转对象)
ARouter 支持自动对象解析:
java
运行
.withObject("user", user)
你只需要实现 SerializationService
11. 全局配置、初始化、监控
java
运行
ARouter.openLog();
ARouter.openDebug();
ARouter.init(app);
三、ARouter 功能大总结(最精简背诵版)
1. 页面路由(Activity/Fragment)
2. 服务暴露(IProvider)
3. URI/Scheme 跳转(推送 / H5)
4. 参数自动注入(@Autowired)
5. 全局拦截器(登录 / 权限 / 日志)
6. 跳转监听(成功 / 失败 / 丢失)
7. Fragment 实例化
8. 批量服务发现
9. 分组懒加载
10. 降级 404
11. 对象自动序列化
四、 给你一套你项目直接复制的完整代码
1. 路由获取 Fragment
java
运行
Fragment fragment = (Fragment) ARouter.getInstance()
.build("/main/homeFragment")
.navigation();
// 添加到布局
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, fragment)
.commit();
2. Fragment 注解
java
运行
@Route(path = "/main/homeFragment")
public class HomeFragment extends Fragment {
}
3. Activity 跳转
场景:页面之间跳转
java
运行
ARouter.getInstance()
.build("/main/mainActivity")
.navigation();
对应 Activity:
java
运行
@Route(path = "/main/mainActivity")
public class MainActivity extends AppCompatActivity {
}