ARouter学习随笔
今天看了会ARouter,在这里简单记录下
跟着其他大哥的博客学习了下,总感觉不牢固,借此机会再次简单记录下。
第一步:ARouter 配置
android {
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [ moduleName : project.getName() ]
}
}
}
}
dependencies {
/* ARouter */
compile 'com.alibaba:arouter-api:1.2.2'
annotationProcessor 'com.alibaba:arouter-compiler:1.1.3'
}
第二步:ARouter 初始化
public class DemoApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
ARouter.openLog(); // 打印日志
ARouter.openDebug(); // 开启调试模式,线上版本需要关闭,否则有安全风险)
ARouter.init( this ); // 尽可能早,推荐在Application中初始化
}
}
目前准备工作就绪,通常如果从A页面跳转到B页面,下面代码我们都很熟悉。
Intent intent = new Intent(A.this,B.class);
startActivity(intent);
但是用ARouter就厉害了,注意了,注意了哈。
第三步:新建两个Activity
MainActivity和SecondActivity,从MainActivity路由到SecondActivity,SecondActivity代码如下:
@Route(path = "/activity/secondActivity")
public class SecondActivity extends AppCompatActivity{
@Autowired
String name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
ARouter.getInstance().inject(this);
Toast.makeText(this,name,Toast.LENGTH_SHORT).show();
}
}
对于被路由到的Activity需要用Route注解,并且注明path路径,path路径需要有两层及以上,比如"/activity/secondActivity",在此个人建议可以对所有的path路径封装在类或接口中,便于统一管理。
public interface RouterContacts {
String GRO_LOGIN = "/login/";
interface login {
String LOGIN = GRO_LOGIN + "login";
}
String GRO_MAIN = "/main/";
interface main {
String MAIN = GRO_MAIN + "main";
}
}
按类别来分,美观大方。
然后在MainActivity中来出发路由,如下
ARouter.getInstance().build("/activity/secondActivity").navigation();
好了,走到这里,基本的路由已经完成了。
这就完了?只是跳转并不能满足我们,我们还要路由带参数
我们先看下在发起者(此处是MainActivity)那里如何用
ARouter.getInstance().
build("/activity/secondActivity").
withString("name","小菜鸟").
navigation();
是的,就是这么简单,另外,ARouter提供了丰富的传参类型,必须多方位满足你。

看看,是不是很多,随便用吧!!
如何取值呢?上边SecondActivity的代码绿色部分已经体现出如何接收取值了。大致为:
a.为参数声明字段,并用@Autowired注解表示,
b.使用ARouter.getInstance().inject(this);方法来inject来初始化@Autowired注解的字段。
c.拿到值了,用就行。
路由结果:
有些时候我们要知道路由结果,比如是否到达,是否丢失,是否被拦截,贴心的ARouter也帮我们想到了
ARouter.getInstance().build("/activity/secondActivity").withString("name","王二蛋").navigation(this, new NavCallback() {
@Override
public void onArrival(Postcard postcard) {
Toast.makeText(MainActivity.this,"已经跳到secondActivity",Toast.LENGTH_SHORT).show();
}
});
源码是这样的
public abstract class NavCallback implements NavigationCallback {
@Override
public void onFound(Postcard postcard) {
// Do nothing
}
@Override
public void onLost(Postcard postcard) {
// Do nothing
}
@Override
public abstract void onArrival(Postcard postcard);
@Override
public void onInterrupt(Postcard postcard) {
// Do nothing
}
}
实际用的时候重写用到的方法就行,我目前用onArrival(Postcard postcard);最多,比如在路由到主页面后关闭登录界面等。
ARouter管理服务之暴露服务
声明一个接口
public interface IService extends IProvider {
void saySomething(Context context,String someword);
}
实现接口
@Route(path = "/service/testsaySomething")
public class MySerivce implements IService{
@Override
public void saySomething(Context context,String someword) {
Toast.makeText(context ,"hello", Toast.LENGTH_SHORT).show();
} @Override
public void init(Context context) { }
}
ARouter管理服务之发现服务
可以通过两种API来获取Service,分别是ByName、ByType
IService service = ARouter.getInstance().navigation(IService.class);
IService service = (IService) ARouter.getInstance().build("/service/testsaySomething").navigation(); service.saySomething("我想说我饿了");
还可以这样的,在需要调用的class中声明,如同声明变量。
@Autowired(name = "/service/testsaySomething")
IService service;
然后初始化@Autowired
ARouter.getInstance().inject(this);
然后调用就ok了
service.saySomething(this,"我想说,我饿了");
说实话,我不是很明白这服务的作用,可能经验尚浅,没有碰到实际应用场景。但是隐约感觉到还是有用的,比如把一些功能写成服务,在其他地方随便调用。
ARouter学习随笔的更多相关文章
- (转) 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ
特别棒的一篇文章,仍不住转一下,留着以后需要时阅读 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ
- C#程序集Assembly学习随笔(第一版)_AX
①什么是程序集?可以把程序集简单理解为你的.NET项目在编译后生成的*.exe或*.dll文件.嗯,这个确实简单了些,但我是这么理解的.详细:http://blog.csdn.net/sws8327/ ...
- Hive入门学习随笔(一)
Hive入门学习随笔(一) ===什么是Hive? 它可以来保存我们的数据,Hive的数据仓库与传统意义上的数据仓库还有区别. Hive跟传统方式是不一样的,Hive是建立在Hadoop HDFS基础 ...
- JavaScript ES6 数组新方法 学习随笔
JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...
- 64位BASM学习随笔(一)
64位BASM学习随笔(一) Delphi的BASM一直是我最喜爱的内嵌汇编语言,同C/C++的内联汇编相比,它更方便,更具灵活性,由于C/C++的内联汇编仅仅能是或插入式的汇编代码,函数花括号 ...
- typeScript学习随笔(一)
TypeScript学习随笔(一) 这么久了还不没好好学习哈这么火的ts,边学边练边记吧! 啥子是TypeScript TypeScript 是 JavaScript 的一个超集,支持 es6 标准 ...
- jquery学习随笔
转)jquery学习随笔(jquery选择器) jQuery的选择器是CSS 1-3,XPath的结合物.jQuery提取这二种查询语言最好的部分,融合后创造出了最终的jQuery表达式查询语言. ...
- Python学习随笔:使用xlwings设置和操作excel多行多列数据以及设置数据字体颜色填充色对齐方式的方法
☞ ░ 前往老猿Python博文目录 ░ 在前面老猿的文章中,<Python学习随笔:使用xlwings读取和操作Excel文件>.<Python学习随笔:使用xlwings读取和操 ...
- PyQt学习随笔:QTextEdit和QTextBrowser删除光标所在行内容的方法
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在使用QTextBrowser用于记录输出日志,并 ...
随机推荐
- [Swift]LeetCode104. 二叉树的最大深度 | Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...
- [Swift]LeetCode205. 同构字符串 | Isomorphic Strings
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- [Swift]LeetCode583. 两个字符串的删除操作 | Delete Operation for Two Strings
Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 t ...
- [Swift]LeetCode764. 最大加号标志 | Largest Plus Sign
In a 2D grid from (0, 0) to (N-1, N-1), every cell contains a 1, except those cells in the given lis ...
- PowerShell 中 RunspacePool 执行异步多线程任务
在 PowerShell 中要执行任务脚本,现在通常使用 Runspace,效率很高:任务比较多时,用 Runspace pool 来执行异步操作,可以控制资源池数量,就像 C# 中的线程池一样 == ...
- JVM基础系列第9讲:JVM垃圾回收器
前面文章中,我们介绍了 Java 虚拟机的内存结构,Java 虚拟机的垃圾回收机制,那么这篇文章我们说说具体执行垃圾回收的垃圾回收器. 总的来说,Java 虚拟机的垃圾回收器可以分为四大类别:串行回收 ...
- 使用ML.NET和Azure Function进行机器学习 - 第1部分
介绍 一提到机器学习,总是让人望而生畏.幸运的是,Azure正在想方设法让开发人员更容易进入机器学习.ML.NET是Microsoft Research专为.NET开发人员开发的机器学习框架,因此您可 ...
- C#3.0导航
C#3.0主要特性 智能的编译器 编译器,背后的默默付出者 Lamdba表达式与表达式树 匿名方法的革命 扩展方法 优雅的对类进扩展 (待完成) LINQ 还有这种操作? (待完成)
- 【ASP.NET Core快速入门】(二)部署到IIS
配置IIS模块 ASP.NET Core Module载地址:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/asp ...
- RabbitMQ消息队列(九)-通过Headers模式分发消息(.Net Core版)
Headers类型的exchange使用的比较少,以至于官方文档貌似都没提到,它是忽略routingKey的一种路由方式.是使用Headers来匹配的.Headers是一个键值对,可以定义成Hasht ...