Handler里send和post方法的区别

来源:互联网 发布:移动端手风琴效果 js 编辑:程序博客网 时间:2024/06/05 20:27

在Android中handler用来进行进程间通信,其中有send和post两种方法,大家常用的send方法,其是在工作线程中处理完耗时操作后调用handler的sendMessage(message)把message对象发送给主线程,在主线程中重写handlerMessage()方法,判断接收到的消息进行更新UI的操作;而post方法传递的是一个runnable对象,更新UI的操作也是在这个runnable的run方法中进行的,也就是说run方法中的代码是执行在主线程中的,虽然它是写在工作线程中,主线程在接收到消息后自动执行runnable的run方法中的代码。
上图上代码:
这里写图片描述
这里写图片描述

public class MainActivity extends Activity {    private Button btSend;    private Button btPost;    private TextView textview;    private static final int SEND_UPDATA_TEXT=0;    private Handler handler=new Handler(){        public void handleMessage(Message msg) {            switch (msg.what) {            case SEND_UPDATA_TEXT:                textview.setText("sendMessage发来的消息");                break;            default:                break;            }        };    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化控件        setViews();        //事件监听        setListener();    }    private void setListener() {       btSend.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View v) {            new Thread(new Runnable() {                @Override                public void run() {                    Message message=new Message();                    message.what=SEND_UPDATA_TEXT;                    handler.sendMessage(message);                }            }).start();        }    });       btPost.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View v) {            new Thread(new Runnable() {                @Override                public void run() {                    //使用post发送消息                    handler.post(new Runnable() {                        //run方法中的代码执行在UI线程中                        @Override                        public void run() {                            textview.setText("post发来消息");                        }                    });                }            }).start();        }    });    }    private void setViews() {        btSend=(Button) findViewById(R.id.bt_send);        btPost=(Button) findViewById(R.id.bt_post);        textview=(TextView) findViewById(R.id.textview);    }}

其二 解释:

SENDMESSAGE OR POSTMESSAGE 吗?

前者等到执行结果返回,后者将消息送到消息队列之后返回^_^

其三 解释:

是的,前者中断进程,后者不中断进程

其四 解释:

post是一直在等到有空闲时才执行

其五解释:
send=>挂号信
post=>平信