android 组件路由框架,XRouter:组件化路由框架

添加jitpack仓库

allprojects {

repositories {

...

maven { url 'https://jitpack.io' }

}

}

添加依赖:

dependencies {

//kotlin 使用kapt编译时依赖注解,Java使用annotationProcessor

kapt 'com.github.roger1245.XRouter:xrouter-compiler:1.0.2'

api 'com.github.roger1245.XRouter:xrouter-core:1.0.2'

}

添加配置:

android {

defaultConfig {

...

javaCompileOptions {

annotationProcessorOptions {

arguments = [moduleName: project.getName()]

}

}

}

初始化SDK:

public class XRouterApplication extends Application {

@Override

public void onCreate() {

super.onCreate();

XRouter.Companion.init(this);

}

}

添加注解:

@Route(path = Config.Module1Activity)

class Module1Activity : AppCompatActivity() {

...

}

发起路由操作:

//1.路由内通过path跳转另一个Activity

XRouter.sInstance.build(Config.Module1Activity).navigation()

通过aop方式获取服务

val hello: HelloService = XRouter.sInstance.build(Config.HELLO_SERVICE).navigation() as HelloService

hello.sayHello(this)

//实现接口

@Route(path = Config.HELLO_SERVICE)

public class HelloService implements IProvider {

@Override

public void init(Context context) {

Toast.makeText(context, "HelloService init successfully", Toast.LENGTH_SHORT).show();

}

public void sayHello(Context context) {

Toast.makeText(context, "HelloService: Hello", Toast.LENGTH_SHORT).show();

}

}

通过接口的方式发现服务:

val userService: IUserService? = XRouter.sInstance.navigation(IUserService::class.java)

userService?.login(this)

//实现接口

@Route(path = Config.USER_SERVICE_IMPL)

public class UserServiceImpl implements IUserService {

@Override

public void init(Context context) {

Toast.makeText(context, "UserServiceImpl init successfully", Toast.LENGTH_SHORT).show();

}

@Override

public void login(Context context) {

Toast.makeText(context, "UserServiceImpl login successfully", Toast.LENGTH_SHORT).show();

}

}

//实现IProvider接口

public interface IUserService extends IProvider {

public void login(Context context);

}

为了加快第一次进入应用的速度,可以通过gradle插件的方式利用ASM插入字节码,替代原来的运行时反射查找类文件的方式,如何引入:

根build.gradle引入:

buildscript {

...

dependencies {

....

classpath "com.github.roger1245.XRouter:xrouter-gradle-plugin:latestversion"

}

}

项目build.gradle引入:

apply plugin: 'xrouter'

即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hystrix原理_面试必问的SpringCloud实现原理图

引言面试中面试官喜欢问组件的实现原理,尤其是常用技术,我们平时使用了SpringCloud还需要了解它的实现原理,这样不仅起到举一反三的作用,还能帮助轻松应对各种问题及有针对的进行扩展。以下是《Java深入微服务原理改造房产销售平台…

android 图片跑马灯动画,ImageView 图片循环跑马灯的效果

不解释了 直接上代码了main.xml布局文件,记住必须用RelativeLayout将ImageView重叠android:orientation"vertical" android:layout_width"fill_parent"android:layout_height"fill_parent" android:id"id/rl">android:…

Rust Trait

Rust 第16节 Trait Trait 告诉编译器 某种类型具有那些并且可以与其他类型共享的功能 它的本质就是 不同类型具有的相同行为 声明一个trait 关键字 trait;只有方法签名,没有方法实现 pub trait Animal {// trait 的声明,一个trait中可以有多个方法fn say(&s…

c++ string类的常用方法_【常用类方法】Object

Object类的知识点总结概述:1. Object类是所有其他类的父类2. Object类只有一个构造方法,这也是为什么所有子类在调用构造方法时都会默认先调用父类的无参构造方法3. Object类没有成员变量方法:1. public int hashCode()2. public final Class…

android 收获地址管理,android UiAutomator添加收货地址的用例

本人在学习UiAutomator的时候,遇到添加收获地址的测试用例,这里的地址的地区是一级一级选择的。所以写了一个随机选择的方法。分享出来,供大家参考。public void addAdress() throws UiObjectNotFoundException {login();waitForResourceIdAn…

python注释以符号什么开始_python注释以什么符号开始

python注释以什么符号开始,注释,中文,代码,批量,符号 python注释以什么符号开始 易采站长站,站长之家为您整理了python注释以什么符号开始的相关内容。 python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也…

verilog 移位运算符 说明_Verilog学习笔记基本语法篇(二)·········运算符...

Verilog HDL的语言的运算符的范围很广&#xff0c;按照其功能大概可以分为以下几类:(1)算术运算符&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%优先顺序&#xff01;~* / % -<< >>< < > > ! !&^ ^~|&&||&…

linux 别名,Linux中的别名就这么简单,如何使用和创建永久别名?

原标题&#xff1a;Linux中的别名就这么简单&#xff0c;如何使用和创建永久别名&#xff1f;输入文本和记命令是Linux命令行爱好者的缺点之一。如果你需要输入并记住同样长的命令&#xff0c;这可能会降低终端的工作效率。如果您可以用自己的短名称替换长命令&#xff0c;或者…

华为手机如何固定横屏_华为手机如何录屏?原来方法这么简单,手把手教你学会...

很多人都不知道&#xff0c;华为手机到底如何录屏&#xff0c;下面给大家分享4种方法&#xff0c;非常简单&#xff0c;手把手教你学会。一、通知栏录屏从手机顶端往下滑动打开通知栏&#xff0c;这个面板上有很多快捷功能&#xff0c;其中就有【屏幕录制】功能&#xff0c;点击…

程序发出的广播其他程序收不到_RabbitMQ 如何实现对同一个应用的多个节点进行广播...

1.背景了解过RabbitMQ的Fanout模式&#xff0c;应该知道它原本的Fanout模式就是用来做广播的。但是它的广播有一点区别&#xff0c;来回顾下它的含义&#xff1a;Fanout类型没有路由键的概念&#xff0c;只要队列绑定到了改exchange上面&#xff0c;就会接收到所有的消息。使用…

android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

我最近做项目用到了基本适配器BaseAdapter&#xff0c;所以写篇博客总结一下&#xff0c;希望也能对你有所帮助什么时候用BaseAdapter(同一项存在多个控件&#xff0c;复杂的列表时)Android中Adapter类其实就是把数据源绑定到指定的View上&#xff0c;然后再返回该View&#xf…

cnn生成图像显著图_基于CNN与图像前背景分离的显著目标检测

基于CNN与图像前背景分离的显著目标检测东野长磊;万文鑫【期刊名称】《软件导刊》【年(卷),期】2020(019)001【摘要】为了解决计算机视觉模拟人眼的视觉机制,显著性目标检测DSS(DeeplySupervisedSalient)在某个场景中人眼首先观察到的目标.基于卷积神经网络和图像前背景分离算法…

api 创建zookeeper客户端_一文了解 Zookeeper 基本原理与应用场景

Zookeeper 是一个高性能、高可靠的分布式协调系统&#xff0c;是 Google Chubby 的一个开源实现&#xff0c;目前在分布式系统、大数据领域中使用非常广泛。本文将介绍 Zookeeper 集群架构、数据模型、监听机制&#xff0c;以及Zookeeper典型的应用场景等。1. Zookeeper 集群角…

mysql操作json优点和缺点_SQL-mysql操作json

一 前言MySQL 5.7.8 之后 支持 JSON (由rfc7159规定)数据类型&#xff0c;其能在字段中使用json 类型&#xff0c;做到了自动校验是否为json类型数据&#xff0c;否则插入数据会报异常&#xff1b;其次&#xff0c;储存json数据内部做到了优化储存&#xff0c;能够快速读取json…

android多个水波球,android球形水波百分比控件代码

本文主要介绍的是一个球形水波的百分比控件&#xff0c;市面上有各种形形色色的百分比控件&#xff0c;我一直觉得水波是最炫的&#xff0c;UI给了我这个机会&#xff0c;然而网上搜了一大堆&#xff0c;不是太复杂&#xff0c;代码太多(反正我是调不出效果来)&#xff0c;就是…

python数据去重的函数_python pandas dataframe 去重函数的具体使用

今天笔者想对pandas中的行进行去重操作&#xff0c;找了好久&#xff0c;才找到相关的函数 先看一个小例子 from pandas import Series, DataFrame data DataFrame({k: [1, 1, 2, 2]}) print data IsDuplicated data.duplicated() print IsDuplicated print type(IsDuplicate…

合信达 机器人_【中信建投 通信】拓邦股份:中报电话会议干货纪要

原标题&#xff1a;【中信建投 通信】拓邦股份&#xff1a;中报电话会议干货纪要一中信建投通信行业分析师 闫慧辰首先非常感谢大家参加我们举办的拓邦股份2017年中报解读电话会议。拓邦股份是我们5月份开始重点推荐的标的之一。我们观察到了公司业绩的爆发增长&#xff0c;同时…

android 3.0单元测试,Android Studio 3.0 gradle 3.0.0-beta2打破了Kotlin单元测试覆盖率?

我有一个简单的Kotlin课程,如下所示class MyClass {fun justSayHello(yes: Boolean): String {if (yes) {return "Hello"} else {return "Sorry"}}}我有我的测试(这里用Java编写,也可以在Kotlin中)public class MyClassTest {private MyClass myClass new…

c++ 二维数组_【技术篇】C指针与二维数组深度辨析

一、源代码/*第01行*/ CLion 2019.3.4 x64中编写的源代码截图二、深度辨析CLion 2019.3.4 x64中编译的结果截图zippo[4][2]是一个四行二列的int型二维数组①不论一维数组还是二维数组&#xff0c;数组名就是指向数组首个元素的指针&#xff0c;也即数组名就是数组首个元素的…

numberformate php_php number_format函数怎么用?

number_format函数是PHP中的一个内置函数&#xff0c;用于格式化一个包含数千个分组的数字&#xff0c;其语法是“string number_format ( $number, $decimals, $decimalpoint, $sep )”。本篇文章主要给大家介绍php number_format用法&#xff0c;希望对需要的朋友有所帮助&am…