Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit d6e0c76

Browse files
author
ubuntulover
committed
add some text
1 parent 1d1b63a commit d6e0c76

File tree

3 files changed

+369
-2
lines changed

3 files changed

+369
-2
lines changed

Android/ActivityThread.md

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public static void main(String[] args) {
6666
thread.attach(false, startSeq);
6767

6868
if (sMainThreadHandler == null) {
69+
// 获取 Handler
6970
sMainThreadHandler = thread.getHandler();
7071
}
7172

@@ -84,4 +85,47 @@ public static void main(String[] args) {
8485
}
8586
```
8687

87-
比较一下这个代码和我们前文[Android Looper的分析](Android/LooperHandler.md)里面的LooperThread例子就可以知道,架构是一样的
88+
比较一下这个代码和我们前文[Android Looper的分析](Android/LooperHandler.md)里面的MyLooperThread例子就可以知道,架构是一样的。但是这里有点小小的区别:
89+
90+
:arrow_right:`prepareMainLooper()``prepare()`
91+
92+
:arrow_right:`Handler`不同
93+
94+
来看第一个问题:
95+
96+
`prepareMainLooper()`和普通的`prepare()`有什么区别?
97+
98+
不多说,直接看代码:
99+
100+
```java
101+
// Looper.java
102+
public static void prepareMainLooper() {
103+
prepare(false); // 还是调用了普通版本的prepare方法, 参数false表示不允许线程退出
104+
synchronized (Looper.class) {
105+
if (sMainLooper != null) {
106+
throw new IllegalStateException("The main Looper has already been prepared.");
107+
}
108+
sMainLooper = myLooper(); // 区分开普通线程的Looper和主线程的Looper
109+
}
110+
}
111+
```
112+
113+
到此应该就很明显了。本质上没啥区别,只是Google玩了一下,巧妙的区分开普通线程和主线程的Looper而已。
114+
115+
那我们来看第二个问题:
116+
117+
`sMainThreadHandler`当ActivityThread创建的时候,可以发现,它还创建了一个这个东西:
118+
119+
```java
120+
final H mH = new H();
121+
```
122+
123+
那么这 H 是个啥?
124+
125+
```java
126+
class H extends Handler{
127+
...
128+
}
129+
```
130+
131+
真相大白!那么在这个里面,我们所谓的UI线程的Handler,就是他了。它的`handleMessage`方法比较复杂,有机会我们再行分析。

Android/Launcher.md

Lines changed: 321 additions & 0 deletions
Large diffs are not rendered by default.

Android/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@
88

99
[Android中Looper,Handler,MessageQueue的分析](Android/LooperHandler.md)
1010

11-
[Android的UI主线程---ActivityThread分析](Android/ActivityThread.md)
11+
[Android的UI主线程---ActivityThread分析](Android/ActivityThread.md)
12+
13+
[Android系统启动过程分析](Android/Launcher.md)

0 commit comments

Comments
 (0)