今天看了会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. Java笔试题:给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?

    在Java笔试面试中,经常会遇到代码题,今天我们就来看一则Java代码笔试题. 有如下代码: Class ReadOnlyClass { private Integer age=20; public ...

  2. FFmpeg 结构体学习(七): AVIOContext 分析

    在上文FFmpeg 结构体学习(六): AVCodecContext 分析我们学习了AVCodec结构体的相关内容.本文,我们将讲述一下AVIOContext. AVIOContext是FFMPEG管 ...

  3. [Swift]LeetCode163. 缺失区间 $ Missing Ranges

    Given a sorted integer array where the range of elements are [0, 99] inclusive, return its missing r ...

  4. [Swift]LeetCode928. 尽量减少恶意软件的传播 II | Minimize Malware Spread II

    (This problem is the same as Minimize Malware Spread, with the differences bolded.) In a network of ...

  5. Java集合类常见的问题

    本篇文章将尝试回答一些Java集合类常见的问题,以作知识梳理之用. ArrayList和LinkList以及Vector的区别 就实现方式而言: ArrayList是以数组的方式实现的列表. Link ...

  6. php内核一些常识

    整个PHP环境和Zend环境会涉及多个全局变量,下面是几个比较重要的: php_core_globals core_globals(main/php_globals.h) ==> PG PHP调 ...

  7. Python内置函数(29)——help

    英文文档: help([object]) Invoke the built-in help system. (This function is intended for interactive use ...

  8. 厉害—Ansible管理windows集群

    最近公司新项目需要安装400+windows server 2012系统的工作站,想着怎么能像linux下运用ansible批量管理,linux就很简单了有ssh服务 但是下却没这么简单,但还是有办法 ...

  9. 『最长等差数列 线性DP』

    最长等差数列(51nod 1055) Description N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不 ...

  10. 《连连看》算法c语言演示(自动连连看)

    (图片是游戏的示意图,来自互联网,与本文程序无关) 看题目就知道是写给初学者的,没需要的就别看了,自己都觉得怪无聊的. 很多游戏的耐玩性都来自精巧的算法,特别是人工智能的水平.比如前几天看了著名的Al ...