首页
/ ActivityRouter高级用法:优先适配、参数转换和错误处理的完整指南

ActivityRouter高级用法:优先适配、参数转换和错误处理的完整指南

2026-02-05 05:49:46作者:申梦珏Efrain

ActivityRouter是一个强大的Android路由框架,它通过URL的方式实现Activity跳转,支持浏览器和App内跳转。本指南将深入讲解ActivityRouter的高级功能,包括优先适配机制、参数类型转换、错误处理策略等实用技巧,帮助你构建更健壮的Android应用。

🎯 优先适配机制详解

ActivityRouter的优先适配功能解决了路由冲突问题。当存在多个相似路由规则时,框架会优先匹配最具体的路由,而不是简单的顺序匹配。

优先适配的实际应用

假设你有两个路由配置:

  • @Router("user/:userId") - 用户详情页
  • @Router("user/statistics") - 用户统计页

不支持优先适配时user/statistics会被第一个路由捕获,userId参数被设置为"statistics"

支持优先适配时user/statistics会精确匹配到第二个路由,这正是你期望的行为!

ActivityRouter优先适配演示

🔄 参数转换与类型指定

ActivityRouter支持强大的参数转换功能,让你能够灵活处理URL参数。

基本参数类型指定

@Router(value = "main/:color", intParams = "color")

这样指定后,color参数会自动转换为int类型,在目标Activity中可以通过getIntent().getIntExtra("color", 0)获取。

参数重命名转换

更高级的参数转换功能:

@Router(value = "item", longParams = "id", transfer = "id=>itemId")

这个配置实现了:

  1. URL参数id被重命名为itemId
  2. 参数类型被指定为long
  3. 在Bundle中可以使用itemId来获取参数值

🛡️ 错误处理与回调机制

ActivityRouter提供了完善的错误处理机制,通过RouterCallback接口实现。

实现自定义回调

在Application类中实现回调提供者:

public class App extends Application implements RouterCallbackProvider {
    @Override
    public RouterCallback provideRouterCallback() {
        return new SimpleRouterCallback() {
            @Override
            public boolean beforeOpen(Context context, Uri uri) {
                // 在打开前执行操作,如权限检查
                return false; // 返回true拦截跳转
            }
            
            @Override
            public void afterOpen(Context context, Uri uri) {
                // 跳转成功后执行
            }
            
            @Override
            public void notFound(Context context, Uri uri) {
                // 路由未找到时的处理
                context.startActivity(new Intent(context, NotFoundActivity.class));
            }
            
            @Override
            public void error(Context context, Uri uri, Throwable e) {
                // 发生错误时的处理
                context.startActivity(ErrorStackActivity.makeIntent(context, uri, e));
            }
        };
    }
}

ActivityRouter HTTP协议拦截

🌐 多协议支持与模块化

HTTP协议支持

ActivityRouter不仅支持自定义协议,还支持标准的HTTP/HTTPS协议:

@Router({"http://mzule.com/main", "main"})

需要在AndroidManifest.xml中配置对应的intent-filter:

<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="http" android:host="mzule.com" />
</intent-filter>

多模块架构

对于大型项目,ActivityRouter支持模块化配置:

  1. 每个模块添加注解

    @Module("app_module")
    
  2. 主项目聚合模块

    @Modules({"app", "app_module"})
    

⚡ 应用内高效调用

除了通过URL跳转,ActivityRouter还支持应用内直接调用,效率更高:

// 直接打开Activity
Routers.open(context, "mzule://main/0xff878798");

// 带返回结果的打开
Routers.openForResult(activity, "mzule://main/0xff878798", REQUEST_CODE);

// 获取Intent但不立即跳转
Intent intent = Routers.resolve(context, "mzule://main/0xff878798");

📊 获取原始URL信息

在目标Activity中,你可以获取原始的URL信息:

String rawUrl = getIntent().getStringExtra(Routers.KEY_RAW_URL);

🔧 混淆配置

确保在proguard-rules.pro中添加:

-keep class com.github.mzule.activityrouter.router.** { *; }

💡 最佳实践总结

  1. 合理使用优先适配:避免路由冲突,提高匹配准确性
  2. 充分利用参数转换:统一参数命名规范,简化代码逻辑
  3. 完善的错误处理:提供友好的用户提示,增强应用稳定性
  4. 模块化架构设计:便于团队协作和功能扩展
  5. 应用内直接调用:提升跳转性能,优化用户体验

ActivityRouter的高级功能让你能够构建更加灵活、健壮的Android应用。通过合理运用这些特性,你可以显著提升应用的路由能力和用户体验。

登录后查看全文
热门项目推荐
相关项目推荐