• Handler使用


    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一同使用,他们被称为四基友,还需要学习一下。

  • 相关阅读:
    耶鲁大学——斯金纳理论基础
    耶鲁大学——弗洛伊德(基础)
    for input 'WID' 报错
    选中当前行wid
    微信支付
    vue.js列表渲染项目实例
    批量删除
    DIV 局部刷新
    DIV块刷新
    CMD DOS命令
  • 原文地址:https://www.cnblogs.com/Sample1994/p/6523388.html
Copyright © 2020-2023  润新知