今天看了会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学习随笔的更多相关文章

  1. (转) 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

    特别棒的一篇文章,仍不住转一下,留着以后需要时阅读 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

  2. C#程序集Assembly学习随笔(第一版)_AX

    ①什么是程序集?可以把程序集简单理解为你的.NET项目在编译后生成的*.exe或*.dll文件.嗯,这个确实简单了些,但我是这么理解的.详细:http://blog.csdn.net/sws8327/ ...

  3. Hive入门学习随笔(一)

    Hive入门学习随笔(一) ===什么是Hive? 它可以来保存我们的数据,Hive的数据仓库与传统意义上的数据仓库还有区别. Hive跟传统方式是不一样的,Hive是建立在Hadoop HDFS基础 ...

  4. JavaScript ES6 数组新方法 学习随笔

    JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...

  5. 64位BASM学习随笔(一)

     64位BASM学习随笔(一) Delphi的BASM一直是我最喜爱的内嵌汇编语言,同C/C++的内联汇编相比,它更方便,更具灵活性,由于C/C++的内联汇编仅仅能是或插入式的汇编代码,函数花括号 ...

  6. typeScript学习随笔(一)

    TypeScript学习随笔(一) 这么久了还不没好好学习哈这么火的ts,边学边练边记吧! 啥子是TypeScript  TypeScript 是 JavaScript 的一个超集,支持 es6 标准 ...

  7. jquery学习随笔

    转)jquery学习随笔(jquery选择器)   jQuery的选择器是CSS 1-3,XPath的结合物.jQuery提取这二种查询语言最好的部分,融合后创造出了最终的jQuery表达式查询语言. ...

  8. Python学习随笔:使用xlwings设置和操作excel多行多列数据以及设置数据字体颜色填充色对齐方式的方法

    ☞ ░ 前往老猿Python博文目录 ░ 在前面老猿的文章中,<Python学习随笔:使用xlwings读取和操作Excel文件>.<Python学习随笔:使用xlwings读取和操 ...

  9. PyQt学习随笔:QTextEdit和QTextBrowser删除光标所在行内容的方法

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在使用QTextBrowser用于记录输出日志,并 ...

随机推荐

  1. 浅析PHP正则表达式的利用技巧

    浅析PHP正则表达式的利用技巧 正则表达式是什么 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串. 将匹配的子串替换 ...

  2. Java高并发缓存架构,缓存雪崩、缓存穿透之谜

    面试题 了解什么是 redis 的雪崩.穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实这是问到缓存必问的,因为缓存雪崩和穿透,是 ...

  3. [Swift]LeetCode276. 粉刷栅栏 $ Paint Fence

    There is a fence with n posts, each post can be painted with one of the k colors. You have to paint ...

  4. [Swift]LeetCode404. 左叶子之和 | Sum of Left Leaves

    Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are two l ...

  5. Hystrix概念设计

    1. Hystrix概念设计 1.1. 大纲 1.2. 基本的容错模式 1.3. 断路器模式 1.4. 舱壁隔离模式 1.5. 容错理念 凡事依赖都可能失败 凡事资源都有限制 网络并不可靠 延迟是应用 ...

  6. 微信小程序实现图片是上传、预览功能

    本文实例讲述了微信小程序实现图片上传.删除和预览功能的方法,分享给大家供大家参考,具体如下: 这里主要介绍一下微信小程序的图片上传图片删除和图片预览 1.可以调用相机也可以从本地相册选择 2.本地实现 ...

  7. python之Django学习笔记(三)---URL调度/URL路由

    在django中,用户发起url请求消息首先到工程的urls.py中查找是否有匹配的url路径 刚创建好的工程中urls.py只有下面几行代码: from django.contrib import ...

  8. Spring高级装配bean

    目录 spring profile 条件化的bean声明 自动装配与歧义性 bean的作用域 Spring表达式语言 一.环境与profile 配置profile  bean 在软件开发的时候,有一个 ...

  9. Cassandra事务与关系型数据库事务有何区别

    Cassandra不会使用回滚和锁机制来实现关系型数据的ACID事务,相比较于提供原子性,隔离性和持久化,Cassandra提供最终(可调节的)一致性,让用户决定为每个事务提供强一致性或者最终一致性. ...

  10. BBS论坛(二十)

    20.1.cms添加轮播图后台逻辑代码完成 (1)apps/models.py from exts import db from datetime import datetime class Bann ...