文档当前状态:**beta0.5**
* [x] 选题收集:2017/11/25
* [x] 初稿整理:
* [ ] 补充校对:
* [ ] 入库存档:
---
这里主要会对ARouter路由使用过程中需要注意的地方进行梳理:
#### 路由注解
* **不要使用手动分组**
在ARouter使用中,给目标路径配置路由时,是下面这行代码:
~~~
//默认分组
// 这里的路径需要注意的是至少需要有两级,/xx/xx
@Route(path = "/test/activity")
public class YourActivity extend Activity {
...
}
//主动分组
@Route(path = "/test/1", group = "app")
// 构建标准的路由请求,并指定分组
ARouter.getInstance().build("/home/main", "ap").navigation();
~~~
文档中还提到了 用户主动分组的用法,但是在酷源码的浏览中发现 主动分组的 方法已标注为 过时,建议使用默认分组。
~~~
/** @deprecated */ @Deprecated public Postcard build(String path, String group) { return _ARouter.getInstance().build(path, group); }
~~~
* **分组策略**
**硬性规定**:ARouter允许一个module中存在多个分组,但是不允许多个module中存在相同的分组,会导致映射文件冲突。
**优化建议** :根据路由表初始化策略,每个分组 仅在首次访问时才会加载,为了避免加载过长,分组粒度 应该竟可能的小,每个分组10个左右为宜;[参考链接](https://github.com/alibaba/ARouter/issues/66)
* **多个路由地址,跳转同一个页面**
暂时不能,后续也不会支持 @Route(path ) 多个路由地址,如果有类似的需求,可以使用PathReplaceService实现。
#### 跳转
* **ARouter 如何去实现startActivityForResult的效果**
在多module的场景下,我们无法直接 过去其他module Activity的class,ARouter正是为此而生,你可以使用下面的方法
~~~
//startActivity()
ARouter.getInstance().build("/test/activity").navigation();
//startActivityForResult()
ARouter.getInstance().build("").navigation(this,requestCode)
~~~
* **ARouter跳转后finish当前页面会有短暂的黑屏或白屏**
**问题描述**:使用下面代码进行跳转时会有 黑屏或白屏
~~~
ARouter.getInstance().build("/test/activity").navigation();
finish();
~~~
**处理**:目前ARouter 跳转Activity的时候现在是强制使用post(Runnable)方式,现在这种实现调navigation后立即调finish()关掉当前Activity会出现短暂白屏(白屏黑屏跟主题有关),需要设置一个NavigationCallback,在onArrival()回调中 finsih()。
~~~
ARouter.getInstance().build("/test/1").navigation(this, new NavigationCallback()
~~~
* **LaunchMode不生效**
**问题**:有几个Activity设置了android:launchMode="singleTask"和android:launchMode="singleInstance",使用startActivity跳转界面,设置能生效,但使用 ARouter.getInstance().build(path).navigation()设置却无法生效。还是一直创建新界面,getTaskId()也一直是新的。AndroidManifest.xml里设置android:launchMode没有生效。
**处理方案:** 查看navigation跳转部分的源码,
~~~
//代码位置 _ARouter.class的_navigation方法
int flags = postcard.getFlags();
if (-1 != flags) {
intent.setFlags(flags);
} else if (!(currentContext instanceof Activity)) { // Non activity, need less one flag.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
~~~
从代码段可以看出 如果你在跳转activity的时候传入当前activity对象,他就不会为intent设置Flag,因为arouter跳转startActivity的时候不传activity对象的话,默认使用的ApplicationContext,使用ApplictaionContext跳转必须加上Intent.FLAG_ACTIVITY_NEW_TASK这个flag,从而导致了你说的问题。如果你想实现预期效果,要么使用navigation(activity),要么在build时候,手动setFlags()。
#### 未分类
* **app自定义WebVIewClient处理URL跳转**
**问题**:如果 WebView 设置了 WebViewClient, 发现 路由功能 不起作用了。 当然, 之所以设置WebViewClient,是为了 直接在APP 中的WebView 打开网页,换言之,就是不启动浏览器。然而 有些H5 需要打开原生界面,这该如何处理呢?
**处理方案**:自己提供 webviewClient,要自己处理 schame 跳转,拼装 intent。
webview.setWebViewClient(new WebViewClient()); 需要自己在shouldOverrideUrl里面去处理自定义Schame,你直接就写了一行new WebviewClient 肯定不行。
[参考链接1](https://github.com/alibaba/ARouter/issues/248)
[参考链接2](https://github.com/alibaba/ARouter/issues/107)
#### 传递值
* **Kotlin Autowired数值编译不成功**
Kotlin中的属性 默认实现了get set方法,如果需要使用Autowired来实现注入,需要加上@jvmfield是可以编译的 属性如果多的话每个都需要加有点繁琐
[参考链接](https://github.com/alibaba/ARouter/issues/243)
* **传递自定义对象 或者集合 需要实现SerializationService 接口**
早期版本 默认使用FashJson,后来改成SerializationService,如果需要传递自定义对象,需要实现该接口
#### 暴露服务
* **不同Module中服务的相互调用**
**问题**:现在有App,MoudleA、MoudleB ,采用ARouter 的方式暴露服务,但IAService、IBService 接口、以及实现类分别在MoudleA、MoudleB中,MoudleA 需要拿到IBService,ModuleB需要拿到IAService,但ModuleA和MoudleB是不能相互依赖的,所以相互调用的时候,如何才能编译通过,独立打包呢?
**处理**:建议你每一个业务模块单独提供一个接口包,这个包中包含接口和传递数据的对象,这样互相依赖接口包就行了。[参考链接](https://github.com/alibaba/ARouter/issues/90)
- 0-发现
- AndroidInterview-Q-A
- Android能让你少走弯路的干货整理
- LearningNotes
- temp
- temp11
- 部分地址
- 0-待办任务
- 待补充列表
- 0-未分类
- AndroidView事件分发与滑动冲突处理
- Spannable
- 事件分发机制详解
- 1-Java
- 1-Java-01基础
- 未归档
- 你应该知道的JDK知识
- 集合框架
- 1-Java-04合集
- Java之旅0
- Java之旅
- JAVA之旅01
- JAVA之旅02
- JAVA之旅03
- JAVA之旅04
- JAVA之旅05
- JAVA之旅06
- JAVA之旅07
- JAVA之旅08
- JAVA之旅09
- java之旅1
- JAVA之旅10
- JAVA之旅11
- JAVA之旅12
- JAVA之旅13
- JAVA之旅14
- JAVA之旅15
- JAVA之旅16
- JAVA之旅17
- JAVA之旅18
- JAVA之旅19
- java之旅2
- JAVA之旅20
- JAVA之旅21
- JAVA之旅22
- JAVA之旅23
- JAVA之旅24
- JAVA之旅25
- JAVA之旅26
- JAVA之旅27
- JAVA之旅28
- JAVA之旅29
- java之旅3
- JAVA之旅30
- JAVA之旅31
- JAVA之旅32
- JAVA之旅33
- JAVA之旅34
- JAVA之旅35
- 1-Java-05辨析
- HashMapArrayMap
- Java8新特性
- Java8接口默认方法
- 图解HashMap(1)
- 图解HashMap(2)
- 2-Android
- 2-Android-1-基础
- View绘制流程
- 事件分发
- AndroidView的事件分发机制和滑动冲突解决
- 自定义View基础
- 1-安卓自定义View基础-坐标系
- 2-安卓自定义View基础-角度弧度
- 3-安卓自定义View基础-颜色
- 自定义View进阶
- 1-安卓自定义View进阶-分类和流程
- 10-安卓自定义View进阶-Matrix详解
- 11-安卓自定义View进阶-MatrixCamera
- 12-安卓自定义View进阶-事件分发机制原理
- 13-安卓自定义View进阶-事件分发机制详解
- 14-安卓自定义View进阶-MotionEvent详解
- 15-安卓自定义View进阶-特殊形状控件事件处理方案
- 16-安卓自定义View进阶-多点触控详解
- 17-安卓自定义View进阶-手势检测GestureDetector
- 2-安卓自定义View进阶-绘制基本图形
- 3-安卓自定义View进阶-画布操作
- 4-安卓自定义View进阶-图片文字
- 5-安卓自定义View进阶-Path基本操作
- 6-安卓自定义View进阶-贝塞尔曲线
- 7-安卓自定义View进阶-Path完结篇伪
- 8-安卓自定义View进阶-Path玩出花样PathMeasure
- 9-安卓自定义View进阶-Matrix原理
- 通用类介绍
- Application
- 2-Android-2-使用
- 2-Android-02控件
- ViewGroup
- ConstraintLayout
- CoordinatorLayout
- 2-Android-03三方使用
- Dagger2
- Dagger2图文完全教程
- Dagger2最清晰的使用教程
- Dagger2让你爱不释手-终结篇
- Dagger2让你爱不释手-重点概念讲解、融合篇
- dagger2让你爱不释手:基础依赖注入框架篇
- 阅读笔记
- Glide
- Google推荐的图片加载库Glide:最新版使用指南(含新特性)
- rxjava
- 这可能是最好的RxJava2.x入门教程完结版
- 这可能是最好的RxJava2.x入门教程(一)
- 这可能是最好的RxJava2.x入门教程(三)
- 这可能是最好的RxJava2.x入门教程(二)
- 这可能是最好的RxJava2.x入门教程(五)
- 这可能是最好的RxJava2.x入门教程(四)
- 2-Android-3-优化
- 优化概况
- 各种优化
- Android端秒开优化
- apk大小优化
- 内存分析
- 混淆
- 2-Android-4-工具
- adb命令
- 一键分析Android的BugReport
- 版本控制
- git
- git章节简述
- 2-Android-5-源码
- HandlerThread 源码分析
- IntentService的使用和源码分析
- 2-Android-9-辨析
- LRU算法
- 什么是Bitmap
- 常见图片压缩方式
- 3-Kotlin
- Kotlin使用笔记1-草稿
- Kotlin使用笔记2
- kotlin特性草稿
- Kotlin草稿-Delegation
- Kotlin草稿-Field
- Kotlin草稿-object
- 4-JavaScript
- 5-Python
- 6-Other
- Git
- Gradle
- Android中ProGuard配置和总结
- gradle使用笔记
- Nexus私服搭建
- 编译提速最佳实践
- 7-设计模式与架构
- 组件化
- 组件化探索(OKR)
- 1-参考列表
- 2-1-组件化概述
- 2-2-gradle配置
- 2-3-代码编写
- 2-4-常见问题
- 2-9-值得一读
- 8-数据结构与算法
- 0临时文件
- 汉诺塔
- 8-数据-1数据结构
- HashMap
- HashMap、Hashtable、HashSet 和 ConcurrentHashMap 的比较
- 迟到一年HashMap解读
- 8-数据-2算法
- 1个就够了
- Java常用排序算法(必须掌握的8大排序算法)
- 常用排序算法总结(性能+代码)
- 必须知道的八大种排序算法(java实现)
- 9-职业
- 阅读
- 书单
- 面试
- 面试-01-java
- Java面试题全集骆昊(上)
- Java面试题全集骆昊(下)
- Java面试题全集骆昊(中)
- 面试-02-android
- 40道Android面试题
- 面试-03-开源源码
- Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
- 面试-07-设计模式
- 面试-08-算法
- 面试-09-其他
- SUMMARY
- 版权说明
- temp111