阿里ARouter简单实现原理

##1.前言

组件化或者模块化开发模式,已逐渐成为热浪的形式,使用这些模式可以让我们程序更容易的扩展、更方便的维护
更快捷的同步开发与更简单的单独调试,而ARouter的出现就是让组件间、模块间是实现完全的独立。

ARouter是:阿里巴巴自研路由框架,主要解决组件间、模块间的 界面跳转 问题。
今天用最简单的方式讲解Arouter的实现原理。
以下是我在学习网易公开课做的笔记,想学习可以百度搜索一下,我最近刚花钱买了个微专业学习,提升自己中,自我感觉不错,哈哈,不是打广告哈(我也没什么人气…)

##2.组件化搭建
这里我就不描述组件化怎么搭建了,我给大家推荐一篇文章(这是鸿阳公众号的一篇文章)手把手带你 实践组件化

##3.自定义超低配ARouter

组件化搭建好后:
我们居然要实现不同组件的跳转,我们肯定需要一个"中间人",这里我创建了一个module,命名为arouter,这里分别定义了两个类Arouter和IArouter代码如下:
1.Arouter

package com.yike.arouter;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import dalvik.system.DexFile;

import java.util.*;

/**
 * Author:wangcaiwen
 * Date:2019-07-16
 * Description:中间人 代理
 */
public class Arouter {
   

    private static Arouter arouter= new Arouter();
    private Context context;
    private static final String TAG = "Arouter";
    public void init(Application context){
   
        this.context = context;
        //这里主要是为了获取通过注解在包名:com.yike.util 下自动生成所有类,
       List<String> classNmaes = getClassNmae("com.yike.util");
        for (String classNmae : classNmaes) {
   
            Log.e(TAG, "init: "+classNmae );
            try {
   
                Class<?> aClass = Class.forName(classNmae);
                //判断这个类是否是IRouter的实现类
                //如果是IArouter的实现类
                if (IArouter.class.isAssignableFrom(aClass)){
   
                    IArouter iArouter = (IArouter) aClass.newInstance();
                    iArouter.putActivity();
                }
            } catch (Exception e) {
   
                e.printStackTrace();
            }
        }
    }


    /**
     *  装载所有的activity的类对象的容器
     */
    private Map<String,Class<? extends Activity>>  activityList;

    public Arouter() {
   
        activityList = new HashMap<>();
    }

    public static Arouter getInstance(){
   
        return arouter;
    }

    /**
     * 将activity的类对象,添加进map
     * @param path   这里参数就是我们定义的路由地址  格式如:(/user/login)
     * @param clazz  这个就是我们需要跳转的activity  也就是说:/user/login-->LoginActivity
     */
    public void putActivity(String path,Class<? extends Activity> clazz){
   
        if (path!=null&&clazz!=null){
   
            activityList.put(path, clazz);
        }
    }

  /**
     * 跳转页面调用的方法
     * @param key
     * @param bundle
     */
    public void jumpActivity(String key, Bundle bundle){
   
    //取出路由地址对应的activity类
        Class<? extends Activity> aClass = activityList.get(key);
        if (aClass==null){
   
            return;
        }
        Intent intent 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值