ARouter 全功能总结:

7 阅读4分钟

一、ARouter 四大核心能力(你必须背住)

  1. 页面路由跳转(Activity/Fragment)
  2. 服务接口暴露 IProvider(跨模块调用)
  3. 通过 URI 跳转(H5、推送、Scheme)
  4. 全局拦截器、全局监听、依赖注入、分组管理

下面我把除跳转、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?
  1. 跨模块访问(多个 module 之间不能直接互相 new)
  2. 解耦(不用依赖类,只用字符串就能找到)
  3. 方便传参、拦截、跳转、获取 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 {
}