File tree 3 files changed +369
-2
lines changed 3 files changed +369
-2
lines changed Original file line number Diff line number Diff line change @@ -66,6 +66,7 @@ public static void main(String[] args) {
66
66
thread. attach(false , startSeq);
67
67
68
68
if (sMainThreadHandler == null ) {
69
+ // 获取 Handler
69
70
sMainThreadHandler = thread. getHandler();
70
71
}
71
72
@@ -84,4 +85,47 @@ public static void main(String[] args) {
84
85
}
85
86
```
86
87
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 ` 方法比较复杂,有机会我们再行分析。
Load Diff Large diffs are not rendered by default.
Original file line number Diff line number Diff line change 8
8
9
9
[ Android中Looper,Handler,MessageQueue的分析] ( Android/LooperHandler.md )
10
10
11
- [ Android的UI主线程---ActivityThread分析] ( Android/ActivityThread.md )
11
+ [ Android的UI主线程---ActivityThread分析] ( Android/ActivityThread.md )
12
+
13
+ [ Android系统启动过程分析] ( Android/Launcher.md )
You can’t perform that action at this time.
0 commit comments