一、为何要使用Handler机制呢?java
通常更新UI,咱们都使用线程防止主线程的卡顿,可是咱们都知道,java是线程不安全的,很容易形成不一样的线程操做同一个view产生混乱。咱们没法作到给每一个线程,每一个view对象都加一个锁,因此谷歌提供了一个给咱们handler,经过looper这样的不断压栈出栈的规则,来进行线程的更新。android
在别的线程中更新UI,还有一些别的方法就不介绍了,不单单是Handler安全
二、Handler的用途是什么呢?app
(1)更新UIide
(2)消息处理(全部activity的生命周期回调的方法都使用的是Handler)oop
三、Handler怎么用呢?post
(1)sendMessage学习
(2)sendMessageDelayedspa
(3)post(Runnable)线程
(4)postDelay(Runnable,long)
1 package android.com.java.handler; 2 3 import android.os.Bundle; 4 import android.os.Handler; 5 import android.os.Message; 6 import android.support.v7.app.AppCompatActivity; 7 import android.widget.ImageView; 8 import android.widget.TextView; 9 10 public class MainActivity extends AppCompatActivity { 11 12 private int Images[] = {R.mipmap.b1,R.mipmap.b2,R.mipmap.b3}; 13 private int index = 0; 14 private ImageView imageView; 15 private TextView textView; 16 private Handler handler1 = new Handler();//处理图片变换 17 private MyRunnable myRunnable = new MyRunnable(); 18 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_main); 23 imageView = (ImageView)findViewById(R.id.image); 24 textView = (TextView)findViewById(R.id.textView); 25 handler1.postDelayed(myRunnable,1000);//跑一个runnable 26 new Thread(){ 27 @Override 28 public void run() { 29 try{ 30 Thread.sleep(1000); 31 // handler.post(new Runnable() { 32 // @Override 33 // public void run() { 34 // textView.setText("100"); 35 // } 36 // }); 37 Message msg = new Message(); 38 msg.arg1 = 88; 39 handler2.sendMessage(msg);//发送消息 40 }catch (Exception e){ 41 e.printStackTrace(); 42 } 43 } 44 }.start();//记住线程要start 45 } 46 47 private Handler handler2 = new Handler(){//处理接收到的信息 48 @Override 49 public void handleMessage(Message msg) { 50 textView.setText(""+msg.arg1);//记住要强制转型 51 } 52 }; 53 54 class MyRunnable implements Runnable { 55 @Override 56 public void run() { 57 index ++ ; 58 index = index % 3; 59 imageView.setImageResource(Images[index]); 60 handler1.postDelayed(myRunnable,1000);//循环的跑下去 61 } 62 }; 63 64 65 }
写了个小的demo,初学勿喷,通常handler 须要与looper,message queue,message一同使用,他们被称为四基友,还须要学习一下。