Android两个子线程之间通信


Android中,相信主线程和子线程之间的通信大家都不陌生了吧。在一次面试经历中被问到了两个子线程之间是如何进行通信的。哎呦!这可蒙住我了。后来回家研究了下,分享给大家。

其实android中线程通信无非就是handler和looper的操作。

一般情况下的主线程和子线程之间的通信,都是通过主线程中的handler把子线程中的message发给主线程中的looper,或者,主线程中的handler通过post向looper中发送一个runnable。looper默认存在于main线程中。那么子线程中没有Looper,该怎么办呢?很简单,我们可以把looper绑定到子线程中,并且创建一个handler。在另一个线程中通过这个handler发送消息,就可以实现子线程之间的通信了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Thread1 extends Thread{ 
         private Handler handler1; 
         public Handler getHandler(){ //注意哦,在run执行之前,返回的是null 
             return handler1; 
        
         @Override 
         public void run() { 
               
             Looper.prepare(); 
             handler1 = new Handler(){ 
                 public void handleMessage(android.os.Message msg) { 
                     //这里处理消息 
                     Log.i( "MThread" , "收到消息了:" +Thread.currentThread().getName()+ "----" +msg.obj); 
                 }; 
             }; 
             Looper.loop(); 
               
        
               
    

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Thread2 extends Thread{ 
         @Override 
         public void run() { 
               
             for ( int i= 0 ; i< 10 ; i++){ 
                 Message msg = Message.obtain(); 
                 msg.what = 1
                 msg.obj = System.currentTimeMillis()+ ""
                 handler1.sendMessage(msg); 
                 Log.i( "MThread" , Thread.currentThread().getName()+ "----发送了消息!" +msg.obj); 
                 SystemClock.sleep( 1000 ); 
            
               
        
    

  

执行效果:

代码下载请见:

http://download.csdn.net/detail/kedaweiwei/8518701


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM