界面组件和线程的交互

 

为了解决ANR问题,使用新建线程的方式。


但新建的线程无法访问到界面组件。视图组件只对创建视图结构层次的线程开放。而对新建的线程是close的。

 

解决这个问题可以通过Android的消息队列机制。即通过线程的消息队列处理器(Handler,外部线程向主线程消息发送消息,主线程在收

 

到消息后,再通过消息的“指示”来控界面。

1)

// 初始化界面线程消息处理器
private final Handler mHandler = new Handler() {

 

@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 获取消息数据
Bundle bundle = msg.getData();
String sendStr = bundle.getCharSequence("Sender").toString();
String msgStr = bundle.getString("Msg");

// 输出消息文本框

}

};

 

2)

将主线程消息处理器传给新建的线程:

 

private void startServiece()

{

mServerThread = new ServerThread(mHandler);

mServerThread.start();

}

3)

在新建的线程中通过主线程消息处理器给主线程发送消息。

 

public void showResponse(Handler handler, String sender, String data)

{

//创建消息包

Bundle bundle = new Bundle();

//设置消息项

bundle.putCharSequence("Sender",sender);

bundle.putString("Msg", data);

//创建消息实体

Message msg = new Message();

//设置消息数据

msg.setData(bundle);

handler.sendMessage(msg);

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值