Skip to content

Commit d3aba44

Browse files
committed
save
1 parent 625a01e commit d3aba44

File tree

4 files changed

+14
-14
lines changed

4 files changed

+14
-14
lines changed

AndroidFramework源码分析/我所理解的Binder机制.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public interface IInterface
5959

6060
*我们称`IApplicationThread``ApplicationThread`这个`Binder`的功能。* 所以`Binder`除了可以理解为系统给我们提供的一个跨进程通信的对象。 我们在用`Binder`通信时,还可以说`Binder`是一个具有某些功能的一个对象。
6161

62-
那么怎么表示`Binder`有功能呢? *即要继承`IInterface`*`IInterface`可以表示`Binder`有功能, 不然你想一个,那么多`Binder`都只实现自己的接口, 那么系统层就不好操作了,它总不能向下强转为`Binder`吧,所以Android定义了一个更高层级的接口`IInterface`。描述`Binder`功能的接口必须继承自这个接口。
62+
那么怎么表示`Binder`有功能呢? *即要继承`IInterface`*`IInterface`可以表示`Binder`有功能, 不然你想一下那么多`Binder`都只实现自己的接口, 那么系统层就不好操作了,它总不能向下强转为`Binder`吧,所以Android定义了一个更高层级的接口`IInterface`。描述`Binder`功能的接口必须继承自这个接口。
6363

6464
重点: *Binder、Binder的功能(IApplicationThread)、IInterface它们都在同一个对象上 -> ApplicationThread*
6565

router/ARouter/基本路由过程.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113

114114
`Warehouse.groupsIndex` : 它的类型是 `Map<String, Class<? extends IRouteGroup>>`。存放着路由组对应的类,这些类都是在编译期动态生成的。
115115

116-
`Warehouse.routes` : 类型是 `Map<String, RouteMeta>`即一个理由path对应一个`RouteMeta`。上面已经看到,它是按组来懒加载的。
116+
`Warehouse.routes` : 类型是 `Map<String, RouteMeta>`即一个路由path对应一个`RouteMeta`。上面已经看到,它是按组来懒加载的。
117117

118118
来总结一下这个方法的主要流程:
119119

router/WMRouter/基本路由架构梳理.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33

44
# 基本元素
55

6-
先来简单理解一下`WMRouter`路由过程中的几个基本构成元素 :
6+
先来简单理解一下`WMRouter`路由过程中的几个基本元素 :
77

8-
`UriRequest` : 封装了一个路由请求
8+
`UriRequest` : 用于封装一个路由请求
99

1010
`UriInterceptor` : 代表一个拦截器,可以对一个`UriRequest`进行拦截,通过`UriCallback`来告诉拦截结果。
1111

@@ -34,13 +34,13 @@ public abstract class UriHandler {
3434
// 是否要处理给定的URI
3535
protected abstract boolean shouldHandle(@NonNull UriRequest request);
3636
37-
//子UriHandler需要写的处理逻辑
37+
//子类需要重写的处理逻辑
3838
protected abstract void handleInternal(@NonNull UriRequest request, @NonNull UriCallback callback);
3939
}
4040
4141
```
4242

43-
`UriHandler`在对一个`Uri`处理时,会调用`handle`方法,因此我们可以通过这个方法理清一个Uri被路由的基本处理过程
43+
`UriHandler`在对一个`Uri`处理时,会调用`handle`方法,这个方法定义了一个`UriRequest`被处理的基本过程。
4444

4545
```
4646
//处理URI。通常不需要覆写本方法。
@@ -68,7 +68,7 @@ OK,在`WMRouter`中一个`uri`被处理的基本逻辑可用用下图表示 :
6868

6969
![UriHandle.handle](picture/UriHandle.handle().png)
7070

71-
所以,定义一个基本的处理`Uri`的类应继承自`UriHandler`,并复写`handle`方法。
71+
所以,定义一个基本的处理`Uri`的类应继承自`UriHandler`,并复写`handleInternal`方法。
7272

7373
## ChainedInterceptor
7474

router/WMRouter/路由节点的动态生成.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
## UriAnnotationHandler的构成
1010

11-
这个类主要由两个功能:
11+
这个类主要有两个功能:
1212

1313
1. 继承自`UrlHandler`,内部包含许多`PathHandler`,可以处理多个(Scheme+Host)的Uri。
1414
2. 加载`@RouterUri`生成的`UrlHandler`,并添加到其对应的`PathHandler`中。作为路由节点。
@@ -28,7 +28,7 @@ public class PathHandler extends UriHandler {
2828

2929
>回顾一下一个uri的组成: Scheme + //: + Host + / + Path + (?) + QueryParams
3030
31-
其实浏览源码,我并没有看到太多设置path prefix的使用,因此这里简单了理解为`PathHandler`就是`UriHandler`的集合,可以通过`register()`来注册一个`UriHandler`, 这个`UriHandler`就会以`path`为key, 它(`UriHandler`)为value,放入map中:
31+
其实浏览源码,我并没有看到太多设置path prefix的使用,因此这里简单的理解为`PathHandler`就是`UriHandler`的集合,可以通过`register()`来注册一个`UriHandler`, 这个`UriHandler`就会以`path`为key, 它(`UriHandler`)为value,放入map中:
3232

3333
```
3434
//注册一个 UriHandler, key为路由的path
@@ -84,7 +84,7 @@ public class PathHandler extends UriHandler {
8484

8585
即根据`UriRequest`的path获取对应的UriHandler,处理这个uri。
8686

87-
继续看`UriAnnotationHandler`
87+
>继续看`UriAnnotationHandler`
8888
8989
这个类也有一个map,其类型为Map<String, PathHandler>。 key是`Scheme://Host`。它也提供一个`register()`方法来添加`PathHandler` :
9090

@@ -114,20 +114,20 @@ public class PathHandler extends UriHandler {
114114
即根据`UriRequest的 scheme+host`获取对应的`PathHandler`,交由`PathHandler`处理,而`PathHandler`其实就是根据`Uri`的path,获取对应的`UriHandler`来处理这个`uri`
115115

116116

117-
ok上面我们大致知道了`UriAnnotationHandler`的组成,以及对于一个`UriRequest`它是如何处理的。 那么它的构成基础`UriHandler`是怎么注册的呢
117+
ok上面我们大致知道了`UriAnnotationHandler`的组成,以及对于一个`UriRequest`它是如何处理的。 那么它的构成基础`UriHandler`是怎么注册的呢?即如何添加到`PathHandler`中的呢?
118118

119119
## 路由节点的动态生成
120120

121121
上面分析后,我们知道`UriAnnotationHandler`提供了`register`方法来向其中注册`uri`。它会根据`uri`来生成对应的`UriHandler`。那么这些注册代码在哪里?怎么生成的呢?
122122

123-
我们先看一下如何在`WMRouter`中定义一个路由节点(即,如何给定一个Url,然后跳转到我们想要跳转的page)。在`WMRouter`中我们可以通过注解来定义路由的Page:
123+
我们先看一下如何在`WMRouter`中定义一个路由节点(即,如何给定一个Url,然后跳转到我们想要跳转的page)。在`WMRouter`中我们可以通过注解来定义可被路由的Page:
124124

125125
```
126126
@RouterUri(scheme = "test", host = "channel1", path = "test_a")
127127
public class TestAActivity extends BaseActivity
128128
```
129129

130-
我们在代码中可以使用 `Router.startUri(context, "test://channel1/test_a")`, 跳转到我们定义的这个Activity。其实`Router.startUri()`的具体实现就是调用`DefaultRootUriHandler`的方法开始整个路由遍历:
130+
我们在代码中可以使用 `Router.startUri(context, "test://channel1/test_a")`, 跳转到我们定义的这个Activity。其实`Router.startUri()`的具体实现就是调用`DefaultRootUriHandler`方法来开始整个路由节点的遍历:
131131

132132
```
133133
public static void startUri(Context context, String uri) {
@@ -153,7 +153,7 @@ public class UriAnnotationInit_xxx implements IUriAnnotationInit {
153153
1. 注册处理器: https://blog.csdn.net/jeasonlzy/article/details/74273851
154154
2. javaopet: https://blog.csdn.net/qq_18242391/article/details/77018155
155155

156-
使用上面这两个工具就可以生成上面的注册代码。因此,这两个技术就不在细看,不过你需要了解,不然接下来的不好理解:
156+
使用上面这两个工具就可以生成上面的注册代码。因此,这两个技术就不在细看,不过你需要了解一下,不然接下来的内容不好理解:
157157

158158
## 动态扫描注解,生成UriHandler注册代码
159159

0 commit comments

Comments
 (0)