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

相关文章

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四