android Handler浅谈

首先得明白 这是浅谈, 也就是说研究不深入,后续会继续跟踪.

我个人认为 android 线程间通信用 Handler +Message 方式.

进程间通信用AIDL.

呵呵,深知自己能力很差, 只是个人理解,希望明白的告诉我下.

为什么说 handler主要用于线呈间通信呢?


Java代码
package com.ray.handler;  
  
import android.content.Context;  
import android.graphics.Canvas;  
import android.graphics.Color;  
import android.graphics.Paint;  
import android.graphics.Point;  
import android.graphics.drawable.Drawable;  
import android.view.View;  
  
public class BounceView extends View {  
    float x = 40;  
      
    public BounceView(Context context) {    
         super(context);    
    }    
  
    @Override    
    protected void onDraw(Canvas canvas) {    
        x+=10;  
        Paint mPaint = new Paint();  
        mPaint.setAntiAlias(true);  
        mPaint.setColor(Color.GREEN);  
        canvas.drawCircle(x, 40, 40, mPaint);  
    }  
}  

上面的代码就是实现了一个简单的Widget .  


package com.ray.handler;  
  
import android.app.Activity;  
import android.content.Context;  
import android.graphics.Canvas;  
import android.graphics.Color;  
import android.graphics.Paint;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
import android.view.View;  
import android.view.Window;  
  
public class TestHandler extends Activity {  
     protected static final int GUIUpdateIDENTIFIER = 0x101;    
        
     Thread myRefreshThread = null;    
     BounceView myBounceView = null;    
    
     Handler myHandler = new Handler() {  
          public void handleMessage(Message msg) {    
               switch (msg.what) {    
                    case TestHandler.GUIUpdateIDENTIFIER:    
                         myBounceView.invalidate();  
                         break;    
               }    
               super.handleMessage(msg);    
          }    
     };  
     public void onCreate(Bundle savedInstanceState) {    
          super.onCreate(savedInstanceState);    
          this.requestWindowFeature(Window.FEATURE_NO_TITLE);    
    
          this.myBounceView = new BounceView(this);  
          this.setContentView(this.myBounceView);    
          new Thread(new myThread()).start();  
     }    
    
     class myThread implements Runnable {    
          public void run() {  
               while (!Thread.currentThread().isInterrupted()) {    
                        
                   [color=White][color=White][color=Red] Message message = new Message();    
                    message.what = TestHandler.GUIUpdateIDENTIFIER;    
                      
                    TestHandler.this.myHandler.sendMessage(message);  
[/color][/color][/color]
                    try {    
                         Thread.sleep(100);    
                    } catch (InterruptedException e) {    
                         Thread.currentThread().interrupt();    
                    }    
               }    
          }    
     }    
}  

红色这几句很诡异,就是用来给Ui  主线程发消息.  UI主线程据说有消息队列,呵呵.Handler在哪个现成创建的.默认就和哪个线程的Looper 绑定. 就可以往哪个线程的消息队列丢消息.

我现在还不太明白的是.  Handler丢了消息,  在绑定的线程中 为什么Handler又能处理消息呢?

Handler Looper  关系还要进一步研究.

主要是为了定时,或中断,或通知更新UI. 又不使UI反应停止或太慢,用多线程发消息办法很不错.

呵呵,多少有点收获吧,回帖子吧?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值