【Android】handler+message的简单用法

简单记录一下handler+message的用法,做个备忘
该项目有两个按钮,都是实现在thread中启动handler,然后弹出对应的吐司
把handler说成是函数其实是为了更好理解,具体是什么我也不知道,调用handler有很多种方法,可以是message调用,可以是handler调用

package com.bm.handler;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

/*
*	参考资料
* 【Android消息处理机制(Handler 与Message)---01】
* https://www.cnblogs.com/fuck1/p/5513412.html
* */

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            ;
            //在这里弹土司,或者更新UI,把它看成一个函数即可
            Toast.makeText(MainActivity.this,
                    " obj:"+msg.obj.toString()+"arg1:"+msg.arg1,
                    Toast.LENGTH_SHORT).show();

        }
    };


    Button button_message,button_handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button_message=findViewById(R.id.id_message_sendToTarget);
        button_handler=findViewById(R.id.id_handler_sendMessage);
        button_message.setOnClickListener(this);
        button_handler.setOnClickListener(this);

    }

    @Override
    public void onClick(final View view) {

        new Thread(new Runnable() {
            @Override
            public void run() {
                //在这里执行耗时操作,如读取文件,网络操作等,一般配合try/catch

                switch (view.getId()){

                    case R.id.id_message_sendToTarget:

                        //假设执行了网络操作

                        //如果要携带信息就弄到message里
                        Message message_sendToTarget=Message.obtain(handler);
                        message_sendToTarget.what=10;//可省略
                        message_sendToTarget.arg1=20;//可省略
                        message_sendToTarget.obj="执行了网络操作";//可省略
                        message_sendToTarget.sendToTarget();//调用最上面那个handler函数
                        break;

                    case R.id.id_handler_sendMessage:

                        //假设执行了文件操作

                        //如果要携带信息就弄到message里
                        Message message_handler_sendMessage=handler.obtainMessage();//怎么初始化message看自己喜欢
                        message_handler_sendMessage.what=30;//可省略
                        message_handler_sendMessage.arg1=40;//可省略
                        message_handler_sendMessage.obj="执行了文件操作";//可省略
                        handler.sendMessage(message_handler_sendMessage);//调用上面那个handler函数
                        break;

                }
            }
        }).start();


    }
}

猜你喜欢

转载自blog.csdn.net/bfz_50/article/details/79064606
今日推荐