Handler理解

Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。常用的方法是利用Handler来实现UI线程的更新的。

 

package com.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 TestView extends View {
    float x = 40;
    public TestView(Context context) {
         super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        x+=5;
        Paint mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.GREEN);
        canvas.drawCircle(x, 100, 100, mPaint);
    }
}
 

public class TestHandler extends Activity { 
     protected static final int GUIUPDATEIDENTIFIER = 0x101;  
     TestView myView = null;  
     Handler myHandler = new Handler() { 
          public void handleMessage(Message msg) {  
               switch (msg.what) {  
                    case TestHandler.GUIUPDATEIDENTIFIER:  
                         myView.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 TestThread()).start(); 
     }  
     class TestThread implements Runnable {  
          public void run() { 
               while (!Thread.currentThread().isInterrupted()) {   
                    Message message = new Message();  
                    message.what = TestHandler.GUIUPDATEIDENTIFIER;  
                    TestHandler.this.myHandler.sendMessage(message);  
                    try {  
                         Thread.sleep(100);   
                    } catch (InterruptedException e) {  
                         Thread.currentThread().interrupt();  
                    }  
               }  
          }  
     }  
}

原文地址:https://www.cnblogs.com/wzh206/p/1736329.html