handler 主线程向子线程中进行信息传递

handler 只是一个消息发送和接受者,一个handler中只能包含一个Loop对象,主线程的handler中进行拿去数据的时候,他依然在UI线程中,所以在主线程中不能进行耗时的操作,而每一个handler都需要和线程相绑定,handler进行消息发送的时候一般情况都是发送给自己,而后面会学习handler将消息发送给别的looper对象,loop对象中有一个消息队列,handler就是在这个消息对列中进行消息的获取,下面是我实现的在主线程中将信息传递给子线程:

main:

public class MainActivity extends Activity {

    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.hello);

        MyThread myThread = new MyThread();
        myThread.start();
<span style="white-space:pre">	</span>//这里让主线程休眠1秒,是为了让子线程的run方法先运行,如果没有的话,下面的handler就是一个null ,会报空指针/<span style="white-space:pre">	</span>//<span style="white-space:pre">	</span>异常,
        try {
            myThread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        Message message = new Message();
        message.arg1 = 1000000;
        myThread.handler.sendMessage(message);

    }

Mythread :

 
public class MyThread extends Thread {

    Handler handler;

    @Override
    public void run() {
        Looper.prepare();//这是创建一个Looper对象
        Log.e("test ", "  thread   ");
        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                Log.e("test"," " + msg.arg1 + "  this si  thread  ");
            }
        };
        Looper.loop();//打开循环消息队列,在这里给说明一下,这里的实现是一个死循环
    }
}


这是执行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值