关于子线程与主线程与hander通信

子线程不能更新ui,主线程不能做耗时操作。

操做流程是
子线程耗时完毕传给handler sendmessage再传给messageQueue再给Looper最后传给UI线程。

arg1/arg2传递整数型。
obj传输大部分。
what属性判断。
 
通过time=Integer. parseInt( ed1.getText().toString());获取edittext中的内容并转换为整数型。

具体代码为

 

public Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); tv1.setText(msg.what+""); }};

 
 
bt1.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { time=Integer. parseInt( ed1.getText().toString()); new Thread( new Runnable() { @Override public void run() { for ( int i= time;i> 0;i--){ Message message= handler.obtainMessage(); message. what=i; handler.sendMessage(message); try { Thread. sleep( 1000); } catch (InterruptedException e){ e.printStackTrace(); } } } }).start(); }});

使用Hander的步骤是
在UI线程中创建Hander匿名内部类;

在匿名内部类中重写handderMessage方法;
在UI线程中启动子线程;

在线程中获得Message对象;
将需要传递的数据赋值到Message对象中;

通过Hander对象的sendMessage方法发送消息到消息阵列;
在handleMessage方法中接收消息。

Looper就是让线程不停的循环工作让普通线程成为循环线程。
当创建Loooper时系统会自动创建一个MessageQueue。

一个线程中只会存在一个Looper和一个MessageQueue。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值