【Android】ARouter新手快速入门

这篇具有很好参考价值的文章主要介绍了【Android】ARouter新手快速入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是ARouter

ARouter是阿里巴巴推出的一款android界面路由框架

ARouter解决的核心问题是什么

在大型的模块化项目中,一个模块,往往无法直接访问到其它模块中的类,必须通过其它方式来完成模块间的调用

ARouter的核心功能在于,它以路径访问的方式,来取代类直接访问的方式,来实现界面跳转功能,从而达到了模块间代码解耦的目的

引入依赖和启用插件


	buildscript {
	    repositories {
	        mavenLocal()
	        maven { url 'https://jitpack.io' }
	        maven { url 'https://maven.aliyun.com/repository/google' }
	        maven { url 'https://maven.aliyun.com/repository/central' }
	        maven { url 'https://maven.aliyun.com/repository/releases' }
	        google()
	        mavenCentral()
	    }
	    dependencies {
	        classpath "com.android.tools.build:gradle:4.2.2"
	        classpath "com.alibaba:arouter-register:1.0.2"
	    }
	}


	apply plugin: 'com.android.application'
	apply plugin: 'com.alibaba.arouter'
	
	android {
	
	    compileSdkVersion 32
	
	    defaultConfig {
	
	        applicationId "com.android.code"
	
	        minSdkVersion 28
	        targetSdkVersion 32
	
	        //在build/generated/ap_generated_sources/debug/out目录下生成路由文档
	        javaCompileOptions {
	            annotationProcessorOptions {
	                arguments = [AROUTER_MODULE_NAME: project.getName(), AROUTER_GENERATE_DOC: "enable"]
	            }
	        }
	    }
	
	    compileOptions {
	        sourceCompatibility JavaVersion.VERSION_1_8
	        targetCompatibility JavaVersion.VERSION_1_8
	    }
	
	    buildFeatures {
	        viewBinding true
	        dataBinding true
	    }
	}
	
	dependencies {
	
	    api 'androidx.appcompat:appcompat:1.2.0'
	    api 'com.google.android.material:material:1.3.0'
	
	    api 'com.alibaba:arouter-api:1.0.2'
	    annotationProcessor 'com.alibaba:arouter-compiler:1.0.2'
	}

初始化

在Application创建时执行以下代码


	package com.android.code;
	
	import android.app.Application;
	
	import com.alibaba.android.arouter.launcher.ARouter;
	
	public class APP extends Application {
	
	    @Override
	    public void onCreate() {
	        super.onCreate();
	        ARouter.openLog();
	        ARouter.openDebug();
	        ARouter.init(this);
	    }
	}

在安卓组件间跳转


	@Route(path = "/activity/second")
	public class SecondActivity extends AppCompatActivity {
	
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	    }
	}


	ARouter.getInstance().build("/activity/second").navigation();

在安卓组件间传递参数


	Postcard postcard = ARouter.getInstance().build("/activity/second");
	postcard.withString("name", "A");
	postcard.withInt("age", 18);
	postcard.navigation();


	@Route(path = "/activity/second")
	public class SecondActivity extends AppCompatActivity {
	
	    @Autowired
	    String name;
	
	    @Autowired
	    int age;
	
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        ARouter.getInstance().inject(this);
	        Log.e("HelloCode", name);
	    }
	}

在网页中调用安卓组件

通过以下链接,就可以直接访问对应的组件

arouter://m.aliyun.com/activity/second?name=A&age=18

跳转拦截


	@Interceptor(priority = 1)
	public class RouteInterceptor implements IInterceptor {
	
	    @Override
	    public void process(Postcard postcard, InterceptorCallback callback) {
	        String path = postcard.getPath();
	        if (path.endsWith("/activity/second"))
	            callback.onInterrupt(new RuntimeException("Interrupted"));
	        else
	            callback.onContinue(postcard);
	    }
	
	    @Override
	    public void init(Context context) {
	        Log.e("HelloCode", "RouteInterceptor Init");
	    }
	}

跳转结果监听


	Postcard postcard = ARouter.getInstance().build("/activity/secondXXX");
	postcard.withString("name", "A");
	postcard.withInt("age", 18);
	postcard.navigation(this, new NavigationCallback() {
	    @Override
	    public void onFound(Postcard postcard) {
	        Log.e("HelloCode", "Route Found");
	    }
	
	    @Override
	    public void onLost(Postcard postcard) {
	        Log.e("HelloCode", "Route Not Found");
	    }
	
	    @Override
	    public void onArrival(Postcard postcard) {
	        Log.e("HelloCode", "Route Arrival");
	    }
	
	    @Override
	    public void onInterrupt(Postcard postcard) {
	        Log.e("HelloCode", "Route Interrupt");
	    }
	});

接口发现和自动装载

ARouter允许根据实现类的路径,自动装载一个接口实例


	public interface IPrintService extends IProvider {
	
	    void print();
	}


	@Route(path = "/service/print/a")
	public class APrintService implements IPrintService {
	
	    @Override
	    public void print() {
	        Log.e("HelloCode", "APrintService Print");
	    }
	
	    @Override
	    public void init(Context context) {
	
	    }
	}


	@Route(path = "/activity/second")
	public class SecondActivity extends AppCompatActivity {
	
	    @Autowired(name = "/service/print/a")
	    IPrintService printService;
	
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        ARouter.getInstance().inject(this);
	        printService.print();
	    }
	}

也可以通过ARouter直接实例化一个对象


	Postcard postcard = ARouter.getInstance().build("/service/print/a");
	IPrintService printService = (IPrintService) postcard.navigation();
	printService.print();

预处理服务

ARouter提供了一个服务类,允许我们在跳转前,做一些预处理工作

注意,这个预处理服务是对所有跳转任务都有效的,无关path


	@Route(path = "/pretreatment/global")
	public class PreService implements PretreatmentService {
	
	    @Override
	    public void init(Context context) {
	        Log.e("HelloCode", "PreService Init");
	    }
	
	    @Override
	    public boolean onPretreatment(Context context, Postcard postcard) {
	        Log.e("HelloCode", "PreService PreWork");
	        return true;
	    }
	}

重定向服务文章来源地址https://www.toymoban.com/news/detail-695420.html


	@Route(path = "/redirect/global")
	public class RedirectService implements PathReplaceService {
	
	    @Override
	    public void init(Context context) {
	        Log.e("HelloCode", "RedirectService Init");
	    }
	
	    @Override
	    public String forString(String path) {
	        boolean inner = path.startsWith("/arouter");
	        if (inner)
	            return path;
	        Log.e("HelloCode", "RedirectService Redirect");
	        return "/activity/second";
	    }
	
	    @Override
	    public Uri forUri(Uri uri) {
	        return uri;
	    }
	}

到了这里,关于【Android】ARouter新手快速入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android快速入门-----用户界面(上)UI组件(1),附面试答案

    @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked){ // 提示 Toast.makeText(SimpleComponActivity.this, cd_simple_pingpang.getText().toString(), 0).show(); } } }); cd_simple_foot.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton but

    2024年04月25日
    浏览(35)
  • Android学习之路(22) ARouter原理解析

    首先我们从命名来看:ARouter翻译过来就是 一个路由器 。 官方定义 : 一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦 那么什么是路由呢? 简单理解就是: 一个公共平台转发系统 工作方式: 1. 注册服务 :将我们需要对外暴露的页面或者服

    2024年01月22日
    浏览(26)
  • Android学习之路(23)组件化框架ARouter的使用

    支持直接解析标准URL进行跳转,并自动注入参数到目标页面中 支持多模块工程使用 支持添加多个拦截器,自定义拦截顺序 支持依赖注入,可单独作为依赖注入框架使用 支持InstantRun 支持MultiDex (Google方案) 映射关系按组分类、多级管理,按需初始化 支持用户指定全局降级与局

    2024年01月22日
    浏览(70)
  • 安卓Android开发快速入门

    配合天哥视频食用更佳:【天哥】Android开发视频教程最新版 Android Studio开发 LinearLayout(线性布局) 可嵌套 最常用属性 id 起标记布局的作用 layout_width [wrap_content根据内容选择大小、match_parent匹配父级、具体数值(单位-dp)] layout_height layout_weight 权重,按照权重比例分配父级

    2023年04月16日
    浏览(30)
  • google vr 入门之制作简易的VR播放器及去除界面控制按钮(1),上海大厂Android面试经历

    ImageView android:id=“@+id/play” android:layout_width=“@dimen/x90” android:layout_height=“@dimen/y90” android:layout_gravity=“center_vertical” android:src=“@mipmap/stop”/ SeekBar android:id=“@+id/video_progress” style=“@style/Widget.AppCompat.ProgressBar.Horizontal” android:layout_width=“@dimen/x600” android:layout_height=“@

    2024年04月10日
    浏览(35)
  • 5G时代下,Android音视频强势崛起,我们该如何快速入门音视频技术?

    作为Android开发者的我们到底应不应该上音视频这条船? 接下来一起分析下。 大趋势 从未来的大趋势来看,随着5G时代的到来,音视频慢慢变成人们日常生活中的必需品。除了在线教育、音视频会议、即时通讯这些必须使用音视频技术的产品外,其它的产品也需要加入音频、

    2024年04月15日
    浏览(51)
  • docker新手快速入门

    Docker 是现代软件开发和部署的神器,它利用容器化技术使应用的交付和运行变得更加高效。今天,我们将详细介绍如何在 CentOS 7 上安装和配置 Docker,同时将揭开 Docker 背后的工作原理,最后通过一个实例来进行验证安装。 Docker 使用容器来运行应用程序,容器就像是轻量级的

    2024年04月16日
    浏览(26)
  • 界面开发框架Qt新手入门教程:Dir视图使用实例

    Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 点击获取Qt Widget组件下载 本示例演示了树形视图的用

    2024年02月08日
    浏览(35)
  • Git 新手快速入门教程

    1. 何为版本控制 版本控制是一种记录文件变化的系统,可以跟踪文件的修改历史,并允许用户在不同版本之间进行比较、恢复或合并。它主要用于软件开发过程中管理代码的变更,但也可以应用于任何需要跟踪文件变更的场景。 版本控制系统(VCS)可以帮助团队协作开发,

    2024年04月26日
    浏览(46)
  • Android开发-Android开发环境搭建(Android Studio详细安装教程,适合新手)

    01 Android开发工具 Android Studio Android Studio是谷歌推出的一个Android集成开发工具, 基于 IntelliJ IDEA .类似Eclipse ADT, Android Studio提供了集成的Android开发工具用于开发和调试 架构组成 。基于Gradle的构建支持 。Android专属的重构和快速修复 。提示工具以捕获性能、可用性、版本兼容性

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包