android handler的使用

        在安卓开发的过程中,对于不同进程之间的通信,是通过handler来实现的。handler中主要由Handler、Message、Message Queue、Looper组成。他们之间的关系就是,在主线程上创建一个子线程,子线程生成Message,Looper获取message并传递给Handler,Handler逐个获取子线程中的Message。

        Handler:主要是用于发送和处理消息的。发送消息一般是使用Handler的sendMessage()、post()等,最终会传递到Handler的handleMessage()方法中。

        Message:Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间 传递数据。

        MessageQueue:MessageQueue是消息队列,主要用于存放通过Handler发送的消息。

        Looper:当发现MessageQueue中存在一条消息时,就会将它取出,传递到Handler的handleMessage()方法中。

        下面主要通过一个简单的案例,演示handler的基本使用。

首先可以通过Thread()和runOnUiThread(),因为不能在非ui线程中,更新ui,所以要使用runOnUiThread中更新ui。具体的代码如下:

            new Thread(() -> {
                    runOnUiThread(() -> {
                        textView.setText(“新的值”);     
                    });
                    SystemClock.sleep(100);
            }).start();

除了使用runOnUiThread,还可以在线程中,直接new一个handler,直接设置ui。具体的代码如下:

          new Thread(() -> {                
                    new Handler(getMainLooper()).post(() -> {
                        textView.setText("通过handle更新");
                    });
                    SystemClock.sleep(100);
            }).start();

也可以定义在外面,通过设置handler.sendEmptyMessage。具体的代码如下:

 handler = new Handler(getMainLooper()){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                switch (msg.what){
                    case START_ANIM:
                        textView.setText(
                                "通过handle更新 123");
                        break;
                }
            }
        };
new Thread(() -> {
    handler.sendEmptyMessage(START_ANIM);
    SystemClock.sleep(100);
                
}).start();

        handler在实际的使用中,还有很多妙用,使用sendMessageDelayed,可以实现发送延迟指定时间的消息。

你可能感兴趣的:(android)