今天看了会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. 数据库sql常见优化方法

    以前刚开始做项目的时候,开发经验尚浅,每次遇到查询比较慢时,项目经理就会问:是不是又用select * 了?查询条件有没有加索引?一语惊醒梦中人,赶紧检查..果然如此! 有时我们写sql语句时,没有考 ...

  2. [Swift]LeetCode530. 二叉搜索树的最小绝对差 | Minimum Absolute Difference in BST

    Given a binary search tree with non-negative values, find the minimum absolute difference between va ...

  3. [Swift]LeetCode757. 设置交集大小至少为2 | Set Intersection Size At Least Two

    An integer interval [a, b] (for integers a < b) is a set of all consecutive integers from ato b, ...

  4. [Swift]LeetCode1017. 负二进制转换 | Convert to Base -2

    Given a number N, return a string consisting of "0"s and "1"s that represents it ...

  5. spring-cloud-sleuth+zipkin源码探究

    1. spring-cloud-sleuth+zipkin源码探究 1.1. 前言   粗略看了下spring cloud sleuth core源码,发现内容真的有点多,它支持了很多类型的链路追踪, ...

  6. openstack快速安装之packstack

    最简单的openstack安装方式之packstack 一.环境准备 我们安装的是all-in-one环境的openstack,测试机IP:192.168.1.10 [root@openstack ~ ...

  7. Spring设计模式_工厂模式

    先说下工厂模式的特性 1.对于调用者来说,影藏了复杂的逻辑处理过程,调用者只关心执行结果. 2.工厂要对结果负责,保证生产出符合规范的产品. Git代码地址  https://github.com/w ...

  8. CentOS 6.5系统上安装SVN服务器

    有效地管理源代码的方式是使用工具去帮助我们管理 , SVN(Subversion)就是目前主流的源代码管理工具 , 也称为版本控制工具. 本文主要介绍CentOS6.5上安装SVN服务器,配置SVN服 ...

  9. C#版 - Leetcode 191. Number of 1 Bits-题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  10. .net core下使用FastHttpApi构建web聊天室

    一般在dotnet core下构建使用web服务应用都使用asp.net core,但通过FastHttpApi组建也可以方便地构建web服务应用,在FastHttpApi功能的支持下构建多人聊天室是 ...