Android平台阿里页面路由ARouter

一、为什么需要路由框架

原生的路由方案存在的问题
首先谈一谈原生的路由方案存在的问题以及为什么需要路由框架。我们所使用的原生路由方案一般是通过显式intent和隐式intent两种方式实现的,而在显式intent的情况下,因为会存在直接的类依赖的问题,导致耦合非常严重;而在隐式intent情况下,则会出现规则集中式管理,导致协作变得非常困难。而且一般而言配置规则都是在Manifest中的,这就导致了扩展性较差。除此之外,使用原生的路由方案会出现跳转过程无法控制的问题,因为一旦使用了StartActivity()就无法插手其中任何环节了,只能交给系统管理,这就导致了在跳转失败的情况下无法降级,而是会直接抛出运营级的异常。

6eb2eafbd4c419c493dbbfb1b05064087cda2173

这时候如果考虑使用自定义的路由组件就可以解决以上的一些问题,比如通过URL索引就可以解决类依赖的问题;通过分布式管理页面配置可以解决隐式intent中集中式管理Path的问题;自己实现整个路由过程也可以拥有良好的扩展性,还可以通过AOP的方式解决跳转过程无法控制的问题,与此同时也能够提供非常灵活的降级方式。

为什么要用路由组件

前面提到的主要是开发与协作中的问题,而使用一款路由框架时还会涉及到其他的两个大方面:一方面是组件化,而另一方面就是Native和H5的问题。刚才所提到的主要是开发和协作中作为开发者所需要面对的问题,而一旦一款APP达到一定体量的时候,业务就会膨胀得比较严重,而开发团队的规模也会越来越大,这时候一般都会提出组件化的概念。组件化就是将APP按照一定的功能和业务拆分成多个小组件,不同的组件由不同的开发小组来负责,这样就可以解决大型APP开发过程中的开发与协作的问题,将这些问题分散到小的APP中。目前而言组件化已经有非常多比较成熟的方案了,而自定义路由框架也可以非常好地解决整个APP完成组件化之后模块之间没有耦合的问题,因为没有耦合时使用原生的路由方案肯定是不可以的。

8bb959df9d1efd0d791ced1a477182fae86cc22f

另外一个问题就是Native与H5的问题,因为现在的APP很少是纯Native的,也很少会有纯H5的,一般情况下都是将两者进行结合。这时候就需要非常便捷并且统一的跳转方案,因为在H5中是无法使用StartActivity()跳转到Native页面的,而从Native跳转到H5页面也只能通过配置浏览器的方式实现。

路由框架的特点
为了解决以上的问题就需要实现一个自定义的路由框架,而路由框架一般都具有以下的三种特点:

  1. 分发:把一个URL或者请求按照一定的规则分配给一个服务或者页面来处理,这个流程就是分发,分发是路由框架最基本的功能,当然也可以理解成为简单的跳转。

  2. 管理:将组件和页面按照一定的规则管理起来,在分发的时候提供搜索、加载、修改等操作,这部分就是管理,也是路由框架的基础,上层功能都是建立在管理之上。

  3. 控制:就像路由器一样,路由的过程中,会有限速、屏蔽等一些控制操作,路由框架也需要在路由的过程中,对路由操作做一些定制性的扩展,比方刚才提到的AOP,后期的功能更新,也是围绕这个部分来做的。

以上文字都是copy,出处是http://www.see-source.com/blog/300000036/1641.html。
ARouter的项目地址是:https://github.com/alibaba/ARouter
集成如下
//阿里路由https://github.com/alibaba/ARouter
    compile 'com.alibaba:arouter-api:1.2.1.1'
    annotationProcessor 'com.alibaba:arouter-compiler:1.1.2.1'
<activity android:name="commonmodule.schamefilter.SchameFilterActivity">
            <intent-filter>
                <data
                    android:host="fuyun.sq.com"
                    android:scheme="http"/>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity>
host和scheme可以随便改.
public class SchameFilterActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Uri uri = getIntent().getData();
        ARouter.getInstance().build(uri).navigation();
        finish();
    }
}
在Application里面进行初始化
ARouter.openLog();     // 打印日志
        ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
        ARouter.init(this); // 尽可能早,推荐在Application中初始化
然后建一个类对路由统一管理
public class RouteRule {

    static RouteRule mRouteRule;

    public static RouteRule getInstance(){
        if (mRouteRule == null){
            mRouteRule = new RouteRule();
        }
        return mRouteRule;
    }

    /**
     * 路由地址http://fuyun.sq.com/main/Main
     * 打开主界面
     */
    public void openMainActivity(){
        ARouter.getInstance().build("/main/Main").navigation();
    }

    /**
     * 路由地址http://fuyun.sq.com/main/Information
     * 打开资讯界面
     * @param position 主页的6个分类
     */
    public void openInformation(int position){
        ARouter.getInstance().build("/main/Information").withInt("type",position).navigation();
    }

    /**
     * 路由地址http://fuyun.sq.com/main/UserCenter
     * 打开个人中心界面
     */
    public void openUserCenterActivity(){
        ARouter.getInstance().build("/main/UserCenter").navigation();
    }

    /**
     * 路由地址http://fuyun.sq.com/main/wxLogin
     * 打开微信界面
     */
    public void openWxLoginActivity(){
        ARouter.getInstance().build("/main/wxLogin").navigation();
    }

    /**
     * 打开详情页
     * @param url
     * @param title
     */
    public void openWebActivity(String url,String title){
        ARouter.getInstance().build("/main/web").withString("url",url).withString("title",title).navigation();
    }
}
在要跳转的类里面配置,如果要接收参数,加上
ARouter.getInstance().inject(this);
无参数跳转不用加,如图




  1. 嗯,具体文档可以看阿里的github。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值