简单记录一下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();
}
}