Android:从零开始打造自己的深度链接库(一):ARouter简介

2024-06-04 16:48

本文主要是介绍Android:从零开始打造自己的深度链接库(一):ARouter简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

原计划这是一个系列的收费文章,2块钱买不了吃亏买不了上当,结果没想到预订人数还没到10人,略微有些尴尬。虽然结局不太完美,但是也反映出大家的水平大部分都在这篇文章的水平之上了,我也可以把文章拆分成多个部分慢慢写了,也是好事一件。

在应用开发中,原生app经常内嵌Web,节省开发的成本,这种情况我们通过注入JS脚本来解决原生和Web的通信问题。那么相反,在浏览器环境中,Web又如何启动App呢?这就是深度链接的出现的原因。

深度链接看着是一个很6的名字,实际上就是隐式启动的一种,所以说有文化就是不一样。隐式启动最大的优势在于不明确指定启动页面的名字,通过各种过滤参数,找到符合条件页面,对匹配的过程解耦,堪称路由模式的鼻祖。

我们谈谈什么是路由模式?
以生活中路由器为例,首先路由器连接可以访问网络的总线,我们通过网线或wifi连接路由器,当我们需要访问网络的时候,路由器帮助我们进行请求转发,访问网络有两种情况:
1、例如看视频,聊天等等,访问的是总线;
2、如果我们要打局域网游戏,就要访问连接同一路由的其他设备;

那么把这种设计理念放入到程序设计中:

总线 相当于主工程
设备 相当于独立模块

路由模式原型图

再说说程序设计模块化的几大好处:

1、便于多人协作开发,尽量避免多人操作同一文件,减少合并代码的引发的问题。
2、便于测试,减少打包测试的时间
3、便于维护,修改某一功能尽可能小的影响其他模块。

模块化有这么多的好处,但同时出现了一个更大的问题:

模块之间如何进行交互?

例如,用户登录和评论两个独立模块,评论之前需要判断是否已登录,否则要跳转到登录页面去,评论模块无法直接访问用户模块的类,所以无法正常编译运行,为了解决这个问题,我们需要借助路由模式。

OK,基本知识我们已经都了解了,接下来我们学习一下ARouter的用法,看看他怎么把路由和深度链接结合起来的。

正文

ARouter路由github地址

首先推荐大家看一下ARouter在github上的教程,英文版和中文版都有,可以说是非常良心了,这里我们挑几个重点介绍一下。

@Router注解

服务注解,用于Activity,Fragment,以及自定义服务接口等等。

@Router注解的类,代表可以被路由的服务,例如跳转页面,启动服务,或者开放服务,例如之前举例的登录,就可以写一个LoginService,然后通过路由地址就可以找到这个服务。

// 跳转页面
@Route(path = "/main/TestActivity", extras = 1)
public class TestActivity extends AppCompatActivity{}
ARouter.getInstance().build("/main/TestActivity").navigation();// 通过路由找到Fragment
@Route(path = "/test/fragment", extras = 1)
public class Fragment1 extends Fragment{}
Fragment fragment = (Fragment) ARouter.getInstance().build("/test/fragment").navigation();// 通过路由找到开放的服务
@Route(path = "/service/sayHello")
public class HelloServiceImpl implements HelloService{}
HelloService service4 = (HelloService)ARouter.getInstance().build("/service/sayHello").navigation();

@Interceptor注解

全局拦截器注解,会在编译过程中自动装配到ARouter配置中,无需手动设置

拦截器会在路由过程中被执行,一旦某一个拦截器拦截,此次路由停止。如果跳转的过程想要跳过拦截器,可以设置greenChannel():

// greenChannel()表示跳过拦截器
ARouter.getInstance().build("/main/TestActivity").greenChannel().navigation();

@Autowired注解

自动装配注解,自动装配符合要求的值,例如从intent中或者通过路由创建对应的对象。

ARouter.getInstance().build("/kotlin/test").withString("name", "老王").withInt("age", 23).navigation();// 自动装配,desc属性表示的描述,没有实际作用
@Autowired(desc = "姓名")
String name = "jack";@Autowired
int age = 10;// 自动装配符合条件的服务
// 如果有多个实现类,请设置路由地址
// @Autowired(name = "/service/sayHello")
@Autowired
HelloService helloService;

SchemeFilterActivity的使用

深度链接过度页面,用于处理从浏览器跳转的参数,然后通过路由找到对应的服务。

SchemeFilterActivity需要在Manifest.xml中注册,这和我们之前了解的深度链接完全一样,得到了地址后,交给ARouter处理,这样深度链接就和路由完美结合在一起使用。

<activity android:name=".activity.SchameFilterActivity"><!-- Schame --><intent-filter><dataandroid:host="m.aliyun.com"android:scheme="arouter"/><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><category android:name="android.intent.category.BROWSABLE"/></intent-filter>
</activity>public class SchemeFilterActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_schame_filter);Uri uri = getIntent().getData();ARouter.getInstance().build(uri).navigation();finish();}
}

总结

这一篇主要是了解一些路由和深度链接相关的知识,然后了解一下ARouter的用法,为之后的源码分析和实战打下基础。

下一篇:ARouter源分析,马上就来。

如果你突然觉得这个系列值两块钱,欢迎到简书打赏一下

这篇关于Android:从零开始打造自己的深度链接库(一):ARouter简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030567

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

用Java打造简易计算器的实现步骤

《用Java打造简易计算器的实现步骤》:本文主要介绍如何设计和实现一个简单的Java命令行计算器程序,该程序能够执行基本的数学运算(加、减、乘、除),文中通过代码介绍的非常详细,需要的朋友可以参考... 目录目标:一、项目概述与功能规划二、代码实现步骤三、测试与优化四、总结与收获总结目标:简单计算器,设计

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree