1、为什么要使用Handler机制呢?
一般更新UI,我们都使用线程防止主线程的卡顿,但是我们都知道,java是线程不安全的,很容易造成不同的线程操作同一个view产生混乱。我们无法做到给每个线程,每个view对象都加一个锁,所以谷歌提供了一个给我们handler,通过looper这样的不断压栈出栈的规则,来进行线程的更新。
在别的线程中更新UI,还有一些别的方法就不介绍了,不仅仅是Handler
2、Handler的用途是什么呢?
(1)更新UI
(2)消息处理(所有activity的生命周期回调的方法都使用的是Handler)
3、Handler怎么用呢?
(1)sendMessage
(2)sendMessageDelayed
(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一同使用,他们被称为四基友,还需要学习一下。