zoukankan      html  css  js  c++  java
  • 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一同使用,他们被称为四基友,还需要学习一下。

  • 相关阅读:
    AGC037F Counting of Subarrays
    AGC025F Addition and Andition
    CF506C Mr. Kitayuta vs. Bamboos
    AGC032D Rotation Sort
    ARC101F Robots and Exits
    AGC032E Modulo Pairing
    CF559E Gerald and Path
    CF685C Optimal Point
    聊聊Mysql索引和redis跳表
    什么是线程安全
  • 原文地址:https://www.cnblogs.com/Sample1994/p/6523388.html
Copyright © 2011-2022 走看看