Handler里send和post方法的区别

在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=>平信

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值