Android UI线程安全 runOnUiThread 和 Handler 一般用法

在非主线程里面操作UI,是非法的

所以有以下两个方法:

1. runOnUiThread

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        
    }
});

 

2. 用Handler:就关于Handler来说,有两个方式传递消息给UI。

//用法1: 直接用 new Message()    public void Test1(){
new Thread(()->{
            Message msg  = new Message();

            msg.what = 1;
            msg.arg1 =  101;
            msg.arg2 = 102;
            msg.obj  =  "Test1 message obj";

            handler.sendMessage(msg);
        }).start();
    }

// 用法2(推荐用这个):
public void Test2(){ new Thread(()->{ Message msg = handler.obtainMessage(); //不自己创建,耳塞从MessagePool 去拿 msg.what = 1000; msg.arg1 = 100001; msg.arg2 = 100002; msg.obj = "Test2 message obj"; handler.sendMessage(msg); }).start(); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { System.out.println("msg what:" + msg.what); System.out.println("msg arg1:" + msg.arg1); System.out.println("msg arg2:" + msg.arg2); System.out.println("msg obj:" + msg.obj);

        //此处属于线程安全,可以设置界面操作:如 txtmsg.setText("print from Handler"); } };

 

posted @ 2019-07-25 15:49  蜜铀  阅读(464)  评论(0编辑  收藏  举报