【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 32defaultConfig {applicationId "com.android.code"minSdkVersion 28targetSdkVersion 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_8targetCompatibility JavaVersion.VERSION_1_8}buildFeatures {viewBinding truedataBinding 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 {@Overridepublic void onCreate() {super.onCreate();ARouter.openLog();ARouter.openDebug();ARouter.init(this);}}
在安卓组件间跳转
@Route(path = "/activity/second")public class SecondActivity extends AppCompatActivity {@Overrideprotected 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 {@AutowiredString name;@Autowiredint age;@Overrideprotected 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 {@Overridepublic void process(Postcard postcard, InterceptorCallback callback) {String path = postcard.getPath();if (path.endsWith("/activity/second"))callback.onInterrupt(new RuntimeException("Interrupted"));elsecallback.onContinue(postcard);}@Overridepublic 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() {@Overridepublic void onFound(Postcard postcard) {Log.e("HelloCode", "Route Found");}@Overridepublic void onLost(Postcard postcard) {Log.e("HelloCode", "Route Not Found");}@Overridepublic void onArrival(Postcard postcard) {Log.e("HelloCode", "Route Arrival");}@Overridepublic 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 {@Overridepublic void print() {Log.e("HelloCode", "APrintService Print");}@Overridepublic void init(Context context) {}}
@Route(path = "/activity/second")public class SecondActivity extends AppCompatActivity {@Autowired(name = "/service/print/a")IPrintService printService;@Overrideprotected 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 {@Overridepublic void init(Context context) {Log.e("HelloCode", "PreService Init");}@Overridepublic boolean onPretreatment(Context context, Postcard postcard) {Log.e("HelloCode", "PreService PreWork");return true;}}
重定向服务
@Route(path = "/redirect/global")public class RedirectService implements PathReplaceService {@Overridepublic void init(Context context) {Log.e("HelloCode", "RedirectService Init");}@Overridepublic String forString(String path) {boolean inner = path.startsWith("/arouter");if (inner)return path;Log.e("HelloCode", "RedirectService Redirect");return "/activity/second";}@Overridepublic Uri forUri(Uri uri) {return uri;}}相关文章:
【Android】ARouter新手快速入门
什么是ARouter ARouter是阿里巴巴推出的一款android界面路由框架 ARouter解决的核心问题是什么 在大型的模块化项目中,一个模块,往往无法直接访问到其它模块中的类,必须通过其它方式来完成模块间的调用 ARouter的核心功能在于,…...
基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十一:通用表单组件封装实现
一、本章内容 本章实现通用表单组件,根据实体配置识别实体属性,并自动生成编辑组件,实现对应数据填充、校验及保存等逻辑。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 3.1 B站视频地址:...
Oracle Scheduler学习
参考文档: Primary Note: Overview of Oracle Scheduler (Doc ID 1485539.1) Oracle Database Administrators Guide 12c Release 1 (12.1) E17636-21 Chapter(30) Administering Oracle Scheduler Examples of Using the Scheduler http://docs.oracle.com/cd/E166…...
用户体验地图是什么?UX设计心得分享
大家好,我是设计师l1m0身。本篇文章是关于UX设计中的用户体验地图。 对于新手设计师来说,建立用户体验地图会有一些难度。本篇文章中,我会以简单、易懂的语言分享UX设计师如何制作用户体验地图,希望对你的日常项目体验提升有所帮…...
vue3动态路由警告问题
{ path: "/:pathMatch(.*)*", // 必备 component: () > import("/views/error/404.vue"), }, 路由里添加...
17 Linux之大数据定制篇-Shell编程
17 Linux之大数据定制篇-Shell编程 文章目录 17 Linux之大数据定制篇-Shell编程17.1 Shell编程简介17.1.1 为什么要学习Shell编程17.1.2 Shell是什么17.1.3 执行Shell脚本 17.2 Shell的变量17.2.1 Shell变量介绍17.2.2 设置环境变量17.2.3 位置参数变量17.2.4 预定义变量 17.3 …...
SpringBoot集成WebSocket
SpringBoot集成WebSocket 项目结构图 项目架构图 前端项目 socket.js 注意前端这里的端口是9000, 路劲是ws开头 function createScoket(token){var socket;if(typeof(WebSocket) "undefined") {console.log("您的浏览器不支持WebSocket");}else{var ho…...
Linux服务器部署JavaWeb后端项目
适用于:MVVM前后台分离开发、部署、域名配置 前端:Vue 后端:Spring Boot 这篇文章只讲后端部署,前端部署戳这里 目录 Step1:服务器上搭建后端所需环境1、更新服务器软件包2、安装JDK83、安装MySQL4、登录MySQL5、修…...
原生小程序 wxs 语法(详细)
WXS WXS(WeiXin Script)是内联在 WXML 中的脚本段。通过 WXS 可以在模版中内联少量处理脚本,丰富模板的数据预处理能力。另外, WXS 还可以用来编写简单的 WXS 事件响应函数。 从语法上看, WXS 类似于有少量限制的 Java…...
MySQL中count(*)和count(1)和count(column)使用比较
分页查询数据,需要返回total,而这个值一般都是通过count函数实现。但是,针对count函数,有多种写法,如count(*)、count(1) 和 count(column)等。本文主要介绍以上几种写法的差异。 注意,这里仅针对MySQL数据…...
python用 xlwings库对Excel进行 字体、边框设置、合并单元格, 版本转换等操作
xlwings 其他的一些单元格读取写入操作网上很多, 下面就写些如何设置单元格的 字体对齐,字体大小、边框, 合并单元格, 这些设置。 import xlwings as xwapp xw.App(visibleTrue, add_bookFalse) app.display_alerts False #…...
Golang 中的 archive/zip 包详解(二):常用类型
Golang 中的 archive/zip 包用于处理 ZIP 格式的压缩文件,提供了一系列用于创建、读取和解压缩 ZIP 格式文件的函数和类型,使用起来非常方便。 zip.File 类型 定义如下: type File struct {FileHeaderzip *Readerzipr io…...
Qt应用开发(基础篇)——错误提示框 QErrorMessage
一、前言 QErrorMessage类继承于QDialog,是一个用来显示错误信息的对话框。 提示框QDialog 消息对话框 QMessageBox QErrorMessage错误消息对话框提供了一个主文本窗口、一个复选框、一个图标和按钮。文本框用来显示错误信息,复选框用来让用户选择未来是…...
HLS 后端示例
更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站 TVM 支持带有 SDAccel 的 Xilinx FPGA 板,接下来介绍如何将 TVM 部署到 AWS F1 FPGA 实例。 备注:此功…...
实录分享 | Alluxio在AI/ML场景下的应用
欢迎来到【微直播间】,2min纵览大咖观点 本次分享主要包括五个方面: 关于Alluxio;盘点企业在尝试AI时面临的挑战;Alluxio在技术栈中的位置;Alluxio在模型训练&模型上线场景的应用;效果对比࿱…...
Streamlit 讲解专栏(十二):数据可视化-图表绘制详解(下)
文章目录 1 前言2 使用st.vega_lite_chart绘制Vega-Lite图表2.1 示例1:绘制散点图2.2 示例2:自定义主题样式 3 使用st.plotly_chart函数创建Plotly图表3.1 st.plotly_chart函数的基本用法3.2 st.plotly_chart 函数的更多用法 4 Streamlit 与 Bokeh 结合进…...
Dockerfile 使用教程
1.Dockerfile 1.1 什么是Dockerfile Dockerfile可以认为是 Docker镜像的描述文件,是由一系列命令和参数构成的脚本 。主要作用是 用来构建docker镜像的构建文件 。 通过架构图可以看出通过DockerFile可以直接构建镜像 1.2 Dockerfile解析过程 构建镜像步骤…...
InnoDB的Buffer
一、Buffer内存结构 MySQL 服务器启动的时候就向操作系统申请了一片连续的内存,默认128M,可通过从参数修改。 [server] innodb_buffer_pool_size 268435456 1.1 控制块 控制块包括该页所属的 表空间编号、页号、缓存页在 Buffer Pool 中的地址、链表…...
普洛斯常熟东南数据中心获LEED金级认证及IDCC绿色算力基础设施奖
近日,普洛斯常熟东南数据中心获得美国绿色建筑评估标准体系LEED v4 BDC(建筑设计与建造)金级认证,并获评IDCC2023长三角区域绿色算力基础设施奖。以可持续发展理念为核心,该数据中心从设计规划、开发建设,到…...
RabbitMQ 启动及参数说明
/usr/local/lib/erlang/erts-10.4/bin/beam.smp -W w -A 128 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true – -root /usr/local/lib/erlang -progname erl – -home /var/lib/rabbitmq – -pa /…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
