1、子线程和子线程之间的通信
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
package lib.com.myapplication; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity
{ private Handler
handler1 ; private Handler
handler2 ; @Override protected void onCreate(Bundle
savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); new MyThread1().start(); new MyThread2().start(); } class MyThread1 extends Thread
{ @Override public void run()
{ super .run(); Looper.prepare(); handler1
= new Handler(){ @Override public void handleMessage(Message
msg) { super .handleMessage(msg); System.out.println( "threadName--" +
Thread.currentThread().getName() + "messageWhat-" +
msg.what ); } }; try { sleep( 3000 ); } catch (InterruptedException
e) { e.printStackTrace(); } handler2.sendEmptyMessage( 2 )
; Looper.loop(); } } class MyThread2 extends Thread
{ @Override public void run()
{ super .run(); Looper.prepare(); handler2
= new Handler(){ @Override public void handleMessage(Message
msg) { super .handleMessage(msg); System.out.println( "threadName--" +
Thread.currentThread().getName() + "messageWhat-" +
msg.what ); } }; try { sleep( 4000 ); } catch (InterruptedException
e) { e.printStackTrace(); } handler1.sendEmptyMessage( 5 )
; Looper.loop(); } } } |
注意:
1、调用Looper类的 prepare()
方法可以为当前线程创建一个消息循环,调用loop()
方法使之处理信息,直到循环结束。
2、Handler有几个构造重载,如果构造时不提供Looper类对象参数,会获取当前线程的Looper对象,即将当前线程的消息循环作为Handler关联的消息循环。
3、消息处理机制中,消息存放在一个消息队列中,而线程围绕这个队列进入一个无限循环,直到程序退出。
如果队列中有消息,线程就会把消息取出来,并分发给相应的Handler进行处理;
如果队列中没有消息,线程就会进入空闲等待状态,等待下一个消息的到来。
from:
http://www.cnblogs.com/zhaoyanjun/p/5546843.html