handler中send和post方法的区别

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

上图上代码:

handler中send和post方法的区别_第1张图片         handler中send和post方法的区别_第2张图片


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);
    }
 
    
}

你可能感兴趣的:(handler中send和post方法的区别)